2010-06-24 15 views
20

我們使用WIX來安裝我們創建的一些服務。我正在編寫一個快速實用程序來轉儲當前安裝的服務。我只是重複了以下子項:註冊表GetSubKeyNames()列出比Regedit不同的鍵?

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

正在尋找DisplayName。問題是,我的十個服務中只有兩個顯示在列表中。

但是,當我查看Regedit中的子項時,它們在那裏。它們也在安裝的程序中(我也可以在Win32_Product的SELECT *中找到它們)。

我查看了MSDN文檔,試圖找出是否有一些我缺少的註冊表的特殊視圖。也許這是一個特權問題?但我以管理員身份運行該工具。是否有一些蜂巢掛載問題?

只是要清楚的代碼,這裏是測試程序代碼(從this answer):

String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey)) 
{ 
    foreach(String subkeyName in key.GetSubKeyNames()) 
    Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName")); 
} 

對這個有什麼想法?

+0

你究竟想要做什麼?另外,你應該把它標記爲「Wix」。 – dvallejo 2010-06-24 17:23:21

+1

另外,請不要在標題中重複標籤(「C#」)。我相信你不認爲'GetSubKeyNames'是一個C#方法,但標題是這樣讀取的。 – 2010-06-24 18:59:13

回答

25

問題是一個32/64位的問題。看來,一些設施的

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

下發生了,當我歷數他們兩個,我讓我所有的安裝。

顯然我也可以用RegistryKey.OpenBaseKey()RegistryView.Registry64/32而不是Wow6432Node