繼example here之後,我添加了啓動我的應用程序的ProgramMenuFolder的快捷方式。 (我的代碼實際上是簡單,因爲我並不需要額外的文件夾。)(WiX)每臺機器安裝的程序文件快捷方式
<DirectoryRef Id='ProgramMenuFolder'>
<Component Id='cmpStartMenuShortcut'
Guid='MY GUID HERE'>
<Shortcut Id='StartMenuShortcut'
Name='$(var.ProductName)'
Icon='MainIcon.ico'
Description='$(var.ProductName)'
Target='[ClientDir]myapp.exe'
WorkingDirectory='ClientDir'/>
<RegistryValue Action='write' Type='integer' Root='HKCU'
Key='Software\Company\Product Name'
Name='installed' Value='1' KeyPath='yes'/>
</Component>
</DirectoryRef>
由於我的安裝是每臺機器,封裝/ @ InstallPrivileges = '升高',並@ InstallScope ='(ALLUSERS = 1 perMachine ')ProgramMenuFolder是機器上所有用戶的文件夾。
我的問題與註冊表值有關。我的理解是隻需簡單地爲包含快捷方式的組件提供KeyPath即可。該示例使用HKCU,這是一個每個用戶的位置。
將每個用戶的值用作每個機器組件的KeyPath不是一個錯誤嗎?
如果一臺機器有兩個管理員,並且管理員#1安裝產品並且管理員#2嘗試修復,則Windows安裝程序將不會看到註冊表值,並且認爲該快捷方式丟失,並且會安裝一個重複,對嗎?
所以我試圖改變RegistryValue/@根到HKLM,但隨後維克斯抱怨:
錯誤LGHT0204:ICE38:組件cmpStartMenuShortcut安裝到用戶的個人資料。它[原文如此] KeyPath註冊表項必須屬於HKCU。
錯誤LGHT0204:ICE43:組件cmpStartMenuShortcut具有未公佈的快捷方式。這是[原文如此] KeyPath註冊表項應歸入HKCU。
錯誤LGHT0204:ICE57:組件'cmpStartMenuShortcut'具有每臺機器KeyPath的每個用戶和每臺機器的數據。
我不明白爲什麼鑰匙必須在HKCU下。
謝謝。這個解決方案似乎爲我工作。我不知道當我開始WiX道路時,我將不得不瞭解XSLT。 –
你還沒有真正回答過,爲什麼一個非廣告的快捷方式不能將其'KeyPath'寫入HKLM,或者爲什麼非廣告的快捷方式需要**註冊表** KeyPath',但廣告的快捷方式不需要。 –