繁体   English   中英

Wix:将自定义操作中的文件复制到程序目录(Windows 7)

[英]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 有很好的解释。

为 uac-on-vista 启用您的应用程序

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM