【问题标题】:Wix: Copy files in Custom Action to Programm Directory ( Windows 7)Wix:将自定义操作中的文件复制到程序目录(Windows 7)
【发布时间】:2010-07-07 10:45:46
【问题描述】:

我创建了一个托管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 复制的文件存在上述问题。

【问题讨论】:

    标签: .net windows wix installation wix3.5


    【解决方案1】:

    确实,此行为是由以标准用户身份运行的 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
    

    前段时间,我在自定义操作方面遇到了类似的问题,this blog post 帮助我弄清楚了如何解决它。这是another post,我认为可能会有所帮助

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      正如您所说,我认为您的自定义操作需要提升。由于您的 CA 是一个 .Net 项目,因此很容易设置它以支持提升。

      请查看下一个链接,它很好地解释了如何在 .Net 项目中处理 UAC。

      enabling-your-application-for-uac-on-vista

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多