2

我创建了一个设法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有描述的问题。

4

2 回答 2

2

实际上,这种行为是由以标准用户身份运行的 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

前段时间,我在自定义操作方面遇到了类似的问题,这篇博文帮助我弄清楚了如何解决它。这是我认为可能有帮助的另一篇文章

希望这可以帮助

于 2010-07-07T11:52:02.167 回答
0

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

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

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

希望能帮助到你。

于 2010-07-12T16:36:30.157 回答