gpt4 book ai didi

wix - 在 WiX 3.7 中结合绝对路径和相对路径

转载 作者:行者123 更新时间:2023-12-04 14:33:17 28 4
gpt4 key购买 nike

我正在尝试使用 RemoveFolderEx在卸载应用程序时从我的安装文件夹中删除上一级文件夹。这是我拥有的,但它不起作用:

  <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:: ... }东西。我看到了几个例子 ${path::combine()}所以我想我认为这可以与 getfullpath 一起使用在.NET 中。也许是这样,只是我的语法有误?

谢谢!

编辑:抱歉,我明白了 ${path::combine...来自 BUILDING WIX 的东西没有完全阅读那篇文章在做什么。它与 wxs 文件无关,它适用于 NAnt(如下面 Rob 所述)。所以我想我的问题很简单:我怎样才能组合并解析像 C:\Program files (X86)\MyApp ID\MyAppLauncher\..\MyApp 这样的绝对路径和相对路径? .谢谢

EDIT2:再次感谢 Rob,我非常专注于解决路径,我什至没有考虑最明显的解决方案,即简单地引用一个新的 <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>

最佳答案

RegistryValue/@Value 中的语法看起来像 NAnt 或其他东西。不清楚是什么解释了它,但 Windows Installer 不会。您有几个选项可以使该注册表值正确。首先,将 RegistryValue 元素更改为如下所示:

<RegistryValue Root="HKLM"
Key="SOFTWARE\MyApp ID\MyApp ID Windows Client"
Name="Path"
Type="string"
Value="[MyAppBaseFolder]MyApp"
KeyPath="yes" />

或者,您可以在目录树中定义“MyApp”并直接引用它。这看起来有点像将以下内容添加为 MyAppBaseFolder 的子项(INSTALLFOLDER 的对等项):

 <Directory Id='MyAppFolder' Name='MyApp' />

然后将您的 RegistryValue 元素更新为:

<RegistryValue Root="HKLM"
Key="SOFTWARE\MyApp ID\MyApp ID Windows Client"
Name="Path"
Type="string"
Value="[MyAppFolder]"
KeyPath="yes" />

我更喜欢后者,但这只是因为我更喜欢使用标识符而不是连接字符串。

关于wix - 在 WiX 3.7 中结合绝对路径和相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com