2014-01-21 47 views
1

这是我写MSI安装程序的第一步。在这里和其他地方有许多关于WIX安装程序中关于UAC的自定义命令的帖子。但是,没有发现任何解决我的问题。WIX自定义动作启动高架应用程序

我需要启动一个在我的MSI中提升的应用程序。我试图启动一个.NET应用程序(编译为以Admin身份运行),它将安装设备驱动程序。如果需要,我使用.NET EXE向用户显示“连接设备”提示,然后在非托管代码中执行实际的驱动程序安装。

MSI立即引起UAC提示,但应用程序随后启动时没有提升,并失败。从提升的命令提示符运行不起作用。我在某处读到,将该清单添加到安装中可能会有所帮助,但不会。

这里是我的维克斯代码:

<?xml version="1.0"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" 
      Name="FlashBoot Driver" Version="0.0.1" Manufacturer="ACME Corp" Language="1033"> 
     <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> 
     <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
      <Directory Id="INSTALLDIR" Name="FlashBoot Driver"> 
       <Component Id="AppFiles" Guid="12345678-1234-1234-1234-222222222222"> 
        <File Id="AppFile1" Source="C:\App\Release\Setup.exe"/> 
        <File Id="AppFile2" Source="C:\App\Release\Setup.exe.manifest"/> 
        <File Id="AppFile3" Source="C:\App\Release\Unmanaged.dll"/> 
       </Component> 
      </Directory> 
     </Directory> 
     </Directory> 

     <Feature Id="DefaultFeature" Level="1"> 
     <ComponentRef Id="AppFiles"/> 
     </Feature> 

     <CustomAction Id="OurAction" 
        Execute="deferred" 
        Impersonate="no" 
        Return="ignore" 
        FileKey="AppFile1" 
        ExeCommand="" /> 

     <InstallExecuteSequence> 
     <Custom Action="OurAction" Before="InstallFinalize" /> 
     </InstallExecuteSequence> 

    </Product> 
</Wix> 

回答

0

我通过具有维克斯安装发射卫星的应用程序,从而启动驱动程序安装解决了这个。新的应用程序不需要提升,而驱动程序安装程序确实需要提升。另一个好处是,新应用程序可以确定是否需要运行32位或64位版本的驱动程序安装程序。

它仍然会很高兴知道是否有办法启动需要直接从WIX安装程序提升的应用程序。

+0

您需要将自定义操作配置为在没有模拟的情况下运行延期,这将使其在LocalSystem帐户下以管理员权限运行。此外,自定义操作必须在InstallFiles标准操作之后进行排序,以确保在尝试安装/使用它们时确保所有资源都在计算机上。此方法适用于来自任何MSI软件包的自定义操作,而不管用于构建它的工具。 –

+0

@Bogdon Mitrache,谢谢你的回复。我以为我在做你的建议。正如你所看到的,延期执行和关闭模拟。至于InstallFiles之后的顺序,不要在“InstallFinalize”之前完成同样的事情吗? –

+0

嗯,对不起,我一定错过了你的代码片段,确实你的自定义操作是正确配置和计划的。安装日志说什么?另外,如果您使用Process Explorer处理您的自定义操作EXE,在哪个帐户下启动?也许你的EXE需要在当前的管理员用户下运行,所以即使它以管理员权限在系统帐户下运行,它也会失败。 –