WiX - CustomAction ExeCommand - 隐藏控制台

jon*_*ers 24 installer windows-installer custom-action wix

我们已经得到一个自定义操作,它运行命令行来工作:

<CustomAction Id="OurAction" 
              FileKey="OurInstalledExe.exe"
              ExeCommand="our command line args" 
              Execute="deferred" 
              Return="check" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

sas*_*ont 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>
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案可能会破坏您的注册表。我正在从命令行编译我的安装程序,由于安装程序安装正常,但在退出时没有所需的文件,“DllEntry="CAQuietExec"”行将我的注册表置于无法修复的状态。在最终重新创建我的 VM 之前,我花了几个小时试图解决这个问题。我应该有还原点,但我当然没有(我的 VM 的基本设置有问题)。在我最终放弃之前,这浪费了我几个小时的时间。当心! (2认同)

Sys*_*min 2

如果您有 EXE 文件的源代码,则可以执行此操作。将 EXE 项目设为Win32 Application项目,而不是Console Application

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

  1. 创建自定义操作 DLL
  2. 通过隐藏控制台窗口,调用 DLL 中的 CustomAction(来自 WiX)来执行该进程。