2010-07-07 56 views
2

我创建了一个托管CustomAction将未包含在* .MSI中的2个文件复制到安装目录。Wix:将自定义操作中的文件复制到Programm目录(Windows 7)

虽然这在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复制的文件才具有所描述的问题。

回答

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 

前段时间我有一个类似的问题与自定义操作和this blog post帮助我弄清楚如何解决它: 请确保您的自定义操作线,看起来像后运行。这是another post,我认为可以帮助

希望这有助于

0

就像你说的,我觉得你的自定义操作需要提升。由于您的CA是一个.Net项目,因此需要设置它来支持高程。

请检查下一个链接,它有一个很好的解释如何在一个.Net项目中使用UAC。

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

希望它能帮助。

+0

链接已死亡FYI – techvice 2015-08-13 17:16:09