WiX - CustomAction ExeCommand - 隐藏控制台

时间:2010-03-03 16:23:52

标签: installer wix windows-installer custom-action

我们已经获得了一个自定义操作,它可以运行命令行来实现:

<CustomAction Id="OurAction" 
              FileKey="OurInstalledExe.exe"
              ExeCommand="our command line args" 
              Execute="deferred" 
              Return="check" />

问题是,当命令运行时,用户会看到控制台弹出窗口。

命令行需要UAC提升,但不应要求任何用户交互。我们还使用安装程序安装文件,自定义操作运行After =“InstallFiles”。

我们如何阻止用户看到控制台?

4 个答案:

答案 0 :(得分:7)

请注意,如果确实需要UAC提升,则需要确保它是延迟执行CA.以下是添加了命令行参数的手册中的示例。

<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
              Value="&quot;[#MyExecutable.exe]&quot; /arguments" Execute="immediate"/>
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec"
              Execute="deferred" Return="check" Impersonate="no"/>
.
.
.
<InstallExecuteSequence>
    <Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/>
    <Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>

答案 1 :(得分:2)

如果您有EXE文件的源代码,那么您可以这样做。制作EXE项目 Win32应用程序项目,而不是控制台应用程序

如果您无法修改EXE文件的源代码,可以通过以下方式执行此操作:

  1. 创建CustomAction DLL
  2. 通过隐藏控制台窗口,在DLL(从WiX)中调用CustomAction来执行该过程。

答案 2 :(得分:0)

您只需为cmd.exe添加第二个命令“exit”

ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe &amp; exit"

希望,它可以帮助你

答案 3 :(得分:0)

有一个鸡和蛋的问题,可执行文件在启动之前必须被标记为控制台应用程序,如果你想在没有控制台弹出的情况下启动这样的exe,它必须有它的进程用正确的旗帜创造。如果您的安装程序无法提供这些,则可以在其间使用第三个.exe。例如,Keybase安装程序启动this small utility, called keybaserq.exe,以便在后台运行持久性控制台应用程序而不会闪烁黑色窗口。它是开源的,你可以看到how the Keybase installer makes use of it - 没有闪烁的控制台窗口。