RemoveFolderEx
アプリのアンインストール時に、インストール フォルダーから 1 レベル上のフォルダーを削除しようとしています。ここに私が持っているものがありますが、機能していません:
<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>
MSI は正常にビルドされますが、セットアップを実行すると、要素で失敗しRegistryValue
、パスの「..」について不平を言っているようです。私が作っている文字列は次のようなものです: "C:\Program Files (X86)\MyApp ID\MyAppLauncher\..\MyApp"
. に解決する必要があります: "C:\Program Files (X86)\MyApp ID\MyApp"
。
私は物事にあまり精通していません${path:: ... }
。でいくつかの例を見たので、.NETで${path::combine()}
動作すると思いました。getfullpath
おそらくそうで、私の構文は間違っていますか?
ありがとうございました!
編集:申し訳ありませんが、その記事が何をしているかを完全に読まずに、ビルド WIX${path::combine...
からその内容を入手しました。これは wxs ファイルとは関係なく、NAnt 用です (Rob が後述するように)。だから私の質問は単純にこれだと思います: のような絶対パスと相対パスをどのように組み合わせて解決できますか? ありがとうC:\Program files (X86)\MyApp ID\MyAppLauncher\..\MyApp
EDIT2: ありがとうロブ、私はパスを解決することに集中していたので、単に新しい<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>