2013-05-31 77 views
1

我無法檢索軟件的Installdir。我已經嘗試過GetValue,甚至OpenSubKey,但每次我得到一個NULL。我使用VS2008,.Net 3.5,64位機器,32位進程設置。使用C獲取註冊表值#

private string GetInstallPath() 
{ 
    string keyValue = string.Empty; 
    Object key = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Tool", "Installdir", null); 
    ... 
} 

雖然在那裏有一個有效的字符串,但鍵仍返回NULL。等價代碼在VC++中起作用。請提供您對此問題的見解。我爲這個所謂的簡單任務做錯了什麼?我不能使用'Hive',因爲它是4.0標準。代碼級別的幫助,而不是鏈接將有所幫助。

VC++相當於

HKEY hkey = NULL; 
LSTATUS status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\My Company\\My Tool\\", 0, KEY_READ, &hkey); 

if (status == ERROR_SUCCESS) 
{ 
    DWORD type; 
    char buff[ 100 ]; 
    DWORD numBytes = sizeof(buff); 
    if (RegQueryValueExA(hkey, REGISTRY_ENTRY, NULL, &type, (LPBYTE) buff, &numBytes) == ERROR_SUCCESS) 
{ 
... 
} 
+0

添加了VC++等價物作爲編輯。 –

+0

@santra_a我發佈了工作的c#實際上會經過並找到一個定義,然後將修改UninstallString來修復應用程序。我相信那是你尋找的正確的東西? – Greg

回答

4

你提到你的機器是64,你的程序是32位,除非我誤解。考慮到您的環境,我要檢查的首要任務是確保密鑰存在於64位節點HKCU\Software\My Company\...中,而不是在32位節點HKCU\Software\Wow6432Node\My Company\...中,如果您的密鑰存在於32位節點中,則需要確保您的應用是一個32位的應用程序,否則,您將需要確保您的應用程序是64位或您不會找到密鑰。

下面的代碼爲我工作,運行在64位,並找到Wow6432Node之外的關鍵。我不明白爲什麼你不能用戶「蜂巢」,它工作在兩個3.5和4.0

RegistryKey regKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\VisualStudio\\10.0"); 

if (regKey != null) 
{ 
    object val = regKey.GetValue("FullScreen"); 
} 

更新: 下面還爲我工作,運行.NET 3.5,如果它不是一個平臺(86 VS 64)的問題,那麼它可能是一個權限問題,請確保您的應用程序在其下運行的背景下訪問註冊表項(試運行的應用程序作爲管理員,甚至造成系統)

object test = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\10.0", "FullScreen", null); 
+0

您希望我檢查的第一件事是錯誤點。我不得不在「任何CPU」平臺目標中將我的代碼顯式設置爲'x86'。這是因爲我試圖獲取的信息是32位,因此在Wow6432中。 –

+0

@santra_a很高興聽到它解決了,是的,AnyCPU將在64位系統上以64位運行,在x86系統上以32位運行,除非初始入口程序集另有說明:) – Jason