0

我在Visual Studio 2010中設置我的部署項目時遇到問題。使用Windows 7 x64的Im。這是我的問題:VS2010部署項目:多用戶安裝和註冊表項問題

設置應該爲所有用戶安裝我的程序。在安裝過程中,將三個註冊表項寫入HKEY_LOCAL_MACHINE/Software/Something文件夾,其中包含串行,名稱和組織的設置變量值 - [COMPANYNAME],[PIDKEY],[USERNAME]。

會發生什麼:

用戶1(管理員)安裝軟件,輸入自己的用戶名,串行和公司。一切正常。通過使用Registry.LocalMachine.OpenSubKey(path),可以找到鑰匙和程序讀取的值。我沒有得到的第一件事是我無法使用regedit.exe找到註冊表項。無論如何,上面的代碼找到了它們。

現在,User2(非管理員)嘗試執行新安裝的程序。安裝程序會再次啓動,並說「等待...以配置...」。 User2的用戶特定文件夾已正確創建。該程序已啓動,但該程序無法找到註冊表項。

現在,最後,User1再次嘗試打開程序。 (註冊表項無法找到。)編輯:註冊表項實際存在,但其值爲空。

所以,我的問題:

  1. 爲什麼我看不到的註冊表項與註冊表編輯器在安裝後,雖然他們顯然在那裏?

(2.爲什麼註冊表項刪除,當第二個用戶試圖啓動程序的第一次,我怎麼能避免呢?)

編輯: 2.爲什麼註冊表值設置爲空字符串,當第二個用戶第一次嘗試啓動程序時,我該如何避免?

來自奧克蘭的歡呼和感謝!

馬克

回答

2
  1. 您可能忽略的註冊表項,如果你已經安裝了64臺機器上有32位軟件包。在這種情況下,註冊表項將在「HKLM \ Wow6432Node ...」下重定向。這是x64 Windows機器的標準行爲。文件重定向到Program Files和Program Files(x86)也是如此。

  2. 這很奇怪。可能發生的情況是,安裝程序的第二次啓動(即正常的自動修復操作)錯誤地刪除了註冊表項。要獲得有關在第二次啓動期間執行的操作的更多詳細信息,我建議您在操作系統上啓用永久記錄。 http://support.microsoft.com/kb/223300

+0

1.完美,我永遠不會那麼一個......不知道爲什麼Find函數沒有找到鍵?無論如何,他們在那裏。 User2啓動程序後,註冊表項仍然存在,但值將被空值覆蓋。所以我在問題描述中實際上弄錯了:條目在那裏,但值被設置爲「」。很明顯,「第二個安裝程序」再次執行該條目,而沒有這個值。你有一個想法如何解決? – Marc 2012-03-06 09:06:44

+0

請注意,除非需要64位支持,否則將.NET應用程序編譯爲x86(而不是「任何」應用程序)而不是對Wow6432Node子項進行硬編碼可能更清晰。 – 2012-03-06 12:39:24

1

奇怪爲什麼查找功能沒有找到鑰匙,但?

可能API使用的是考慮如果所有的值都是空的鍵不存在。你應該檢查它的文檔。

很明顯,「第二個安裝程序」再次執行該條目,而沒有值。你有一個想法如何解決?

如果註冊表是使用公共屬性的值編寫的,通常會發生這種情況。在自動修復過程中,屬性沒有初始安裝值,因此它們被認爲包含空字符串,而不是用於替換註冊表值。

您唯一的解決方法是在修復過程中運行一個小的自定義操作,即立即在註冊表條目被覆蓋之前進行搜索並將其值放入您正在使用的屬性中。這樣覆蓋操作將使用正確的值。