2010-03-05 25 views
0

操作系統:MS Windows XP專業版(SP3)WiX:如何將安裝時指定的變量寫入所有用戶的當前用戶註冊表項?

我的應用程序需要訪問外部數據庫,這是我在安裝時指定的位置。然後將指定的文件路徑寫入註冊表,然後應用程序在需要時將這些信息從註冊表中提取出來。我已經在WiX中實現了這一點,如下所示,僅使用其中一個文件路徑作爲示例:

1)我創建一個稱爲RootDir的變量,併爲其指定一個默認字符串值「 C:\」

<?define RootDir="C:\"?> 

2)我插入安裝UI一個額外的對話框,並有一個編輯框(等等),這將顯示在以上默認的文件路徑。

<Dialog Id="FilePathDlg" Width="370" Height ="270" Title ="xxx"> 
    <Control Id="RootDirEdit" Type="Edit" X="20" Y="72" Width="320" Height="18" Property="ROOTDIR" Text="[ROOTDIR]" /> 

3)I還具有用於創建註冊表鍵的成分,其中該字符串將駐留

<Component Id="RegistryEntries" Guid="04AD0437-89E1-498c-85FF-EE180BEB53E0"> 
    <RegistryKey Root="HKCU" Key="Software\xxx" Action="createAndRemoveOnUninstall"> 
    <RegistryValue Type="string" Name="xxx" Value="[ROOTDIR]" KeyPath="yes"/> 
    </RegistryKey> 
</Component> 

當安裝程序被運行時,用戶可以編輯(2)中所描述的編輯框輸入所需的文件路徑(比如「P:\」)。此值保存到RootDir,然後安裝註冊表項時,該值將寫入註冊表。

到目前爲止,這麼好。這可以工作,但問題在於它只將用戶指定的值(在本例中爲「P:\」)寫入執行安裝的用戶的當前用戶密鑰的註冊表項中。由於我希望應用程序僅由管理員安裝(我有條件執行此操作),顯然,用戶指定的文件路徑僅寫入管理員的當前用戶密鑰。

我有一個線,其確保安裝每臺機器,而不是每個用戶(即ALLUSERS的值是1):

<Package InstallerVersion="300" Compressed="yes" Platform = "x86" InstallScope="perMachine"/> 

因此,雖然安裝爲所有用戶創建的註冊表項,所述用戶指定變量的值保留在所有其他用戶的默認值(在本例中爲「C:\」),但更改爲管理員的指定值(P :)。

有誰知道我可以如何改變這種方式,以便用戶指定的變量寫入所有用戶的當前用戶密鑰註冊表項而不僅僅是管理員?

+0

糾正我,如果我錯了,但它看起來像你試圖把應該在HKLM HKCU的東西。當你在當前用戶中設置某些東西時,就是這樣,當前用戶。不幸的是,我不認爲有一種方法可以爲一個用戶的所有用戶設置當前的用戶設置。您的程序是否絕對需要在HKCU註冊表登錄? – 2010-03-05 20:29:20

+0

你可能是對的 - 它只是令人沮喪,它幾乎工作,但不完全!應用程序確實需要在HKCU中有一些變量,因爲我希望不同的用戶能夠在應用程序中擁有不同的設置,但我想我必須用用戶指定的文件路徑重寫該位以進入HKLM。 唯一讓我困惑的是,所有用戶都獲得了我在HKCU中創建的註冊表項 - 請參閱上面的「因此,儘管安裝程序爲所有用戶創建了註冊表項......」,那麼爲什麼修改它是如此重要所有用戶的一些變量,而不僅僅是管理員? – user8445800 2010-03-07 21:18:44

回答

0

有一種方法,但我強烈反對它。它依靠Windows修復在第一次使用您的應用程序時將HKCU註冊表組件傳播給每個用戶配置文件。第一次使用該程序時,請考慮您已經看到多少次Microsoft Office請求CDROM。

這屬於HKLM,你應該重寫你的應用程序在那裏接受它。此外,還有一些人會說配置數據不屬於安裝程序,您應該在第一次運行應用程序時獲得它。我相信我並沒有走得太遠,但這是你需要考慮的事情。

3

您的安裝人員應寫信給HKLM。啓動時,您的應用程序應檢查HKCU中的值,如果它們不存在,則應從HKLM複製。

相關問題