[英]Wix: Copy files in Custom Action to Programm Directory ( Windows 7)
我创建了一个托管的CustomAction
来将 *.MSI 中不包含的 2 个文件复制到安装目录。
虽然这在 Windows XP 中有效,但在 Windows 7 中失败。虽然日志说文件被复制到所需的位置, C:\\Program Files\\MyApp\\
,但它们实际上被复制到C:\\Users\\MyUser\\AppData\\Local\\VirtualStore\\Program Files (x86)\\MyApp\\
。 我的猜测是,这与修改程序文件夹的访问权限有关。
这就是我在 WiX 中调用自定义操作的方式:
<CustomAction
Id='InstallSource'
BinaryKey='SrcInstActionDll'
DllEntry='InstallSourceFiles'
Execute='deferred'
Impersonate='no'/>
<CustomAction
Id="InstallSource.SetProperty"
Return="check"
Property="InstallSource"
Value='Files=[SourceDir]$(var.SourceZipName),[SourceDir]$(var.SymbolsZipName);TargetDir=[ParentFolder]'
Execute='immediate'/>
CustomAction
本身只是调用File.Copy()
。 安装程序复制的其他文件在 Windows 7 中完美运行。只有使用CustomAction
复制的文件CustomAction
出现所描述的问题。
实际上,这种行为是由作为标准用户运行的 32 位应用程序(在 64 位 Windows 中)尝试写入某些特权文件夹时触发的文件系统重定向引起的。
对我来说,您的自定义操作似乎没有运行提升。 由于自定义操作定义看起来正确,因此剩下的问题是您在哪里触发此自定义操作。
既然你提到了日志,我假设你正在运行 msiexec 并检查日志。 确保您的自定义操作在如下所示的行之后运行:
MSI (s) (BC:70) [13:34:10:669]: MSI_LUA: Elevation required to install product, will prompt for credentials
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Credential Request return = 0x0
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Elevated credential consent provided. Install will run elevated
前段时间我遇到了类似的自定义操作问题, 这篇博文帮助我找出了解决方法。 这是我认为可能有帮助的另一篇文章
希望这可以帮助
就像你说的,我认为你的自定义操作需要提升。 由于您的 CA 是一个 .Net 项目,因此设置它以支持提升很容易。
请检查下一个链接,它对如何在 .Net 项目上处理 UAC 有很好的解释。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.