我試圖在卸載應用程序時使用RemoveFolderEx
從安裝文件夾中刪除一個級別的文件夾。這裏是我有什麼,但它不工作:將絕對路徑與WiX中的相對路徑相結合3.7
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MyAppBaseFolder" Name="MyAppID">
<Directory Id="INSTALLFOLDER" Name="MyAppLauncher">
<Directory Id="UPDATESCRIPTSFOLDER" Name="Scripts" />
<Component Id="CleanupMainApplicationFolder" Guid="*">
<RegistryValue Root="HKLM" Key="SOFTWARE\MyApp ID\MyApp ID Windows Client" Name="Path" Type="string" Value="${path::getfullpath(path::combine([INSTALLFOLDER],'..\MyApp'))}" KeyPath="yes" />
<util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="MyApp ID"/>
</Directory>
</Directory>
</Fragment>
微星將建設很好,但是當我運行安裝它似乎是失敗的RegistryValue
元素和路徑抱怨「..」 。我正在製作的字符串如下:"C:\Program Files (X86)\MyApp ID\MyAppLauncher\..\MyApp"
。我需要它來解決:"C:\Program Files (X86)\MyApp ID\MyApp"
。我不太熟悉${path:: ... }
的東西。我看到${path::combine()}
的幾個例子,所以我想我會認爲這將在.NET中使用getfullpath
。也許它確實存在,我的語法錯了?
謝謝!
編輯:對不起,我得到了${path::combine...
東西從BUILDING WIX沒有完全閱讀那篇文章正在做什麼。它與wxs文件無關,它是針對NAnt的(正如Rob所述)。所以我想我的問題只是這樣的:我怎樣才能組合和解決絕對和相對的路徑,如C:\Program files (X86)\MyApp ID\MyAppLauncher\..\MyApp
。謝謝
編輯2:再次感謝羅布,我非常關注解決路徑,我甚至沒有考慮最明顯的解決方案,它只是簡單地引用一個新的<Directory
元素。我現在把它清理2個文件夾下面的代碼:
<Property Id="APPLICATIONFOLDER">
<RegistrySearch Key="SOFTWARE\MyApp ID\MyApp ID Windows Client" Root="HKLM" Type="raw" Id="APPLICATIONFOLDER_REGSEARCH" Name="Path" />
</Property>
<Property Id="PRINTERFOLDER">
<RegistrySearch Key="SOFTWARE\MyApp ID\MyApp ID Printer" Root="HKLM" Type="raw" Id="PRINTERFOLDER_REGSEARCH" Name="Path" />
</Property>
...
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MyAppBaseFolder" Name="MyAppID">
<Directory Id="INSTALLFOLDER" Name="MyAppLauncher">
<Directory Id="UPDATESCRIPTSFOLDER" Name="Scripts" />
<Component Id="CleanupMainApplicationFolder" Guid="*">
<RegistryValue Root="HKLM" Key="SOFTWARE\MyApp ID\MyApp ID Windows Client" Name="Path" Type="string" Value="[LM_INSTALLFOLDER]" KeyPath="yes" />
<util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER" />
<RegistryValue Root="HKLM" Key="SOFTWARE\MyApp ID\MyApp ID Printer" Name="Path" Type="string" Value="[LMP_INSTALLFOLDER]" />
<util:RemoveFolderEx On="uninstall" Property="PRINTERFOLDER" />
</Component>
</Directory>
<Directory Id="LM_INSTALLFOLDER" Name="MyApp" >
</Directory>
<Directory Id="LMP_INSTALLFOLDER" Name="MyAppPrinter" >
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="MyApp ID"/>
</Directory>
</Directory>
</Fragment>
非常感謝(再次)羅布!當你寫答案時,我只是更新我的帖子。的確是NAnt。我想我應該先閱讀這些文章,然後再將隨機代碼粘貼到我的XML中:)。我現在要嘗試你的建議。 – 2013-04-26 21:06:34