我们已经获得了一个自定义操作,它可以运行命令行来实现:
<CustomAction Id="OurAction"
FileKey="OurInstalledExe.exe"
ExeCommand="our command line args"
Execute="deferred"
Return="check" />
问题是,当命令运行时,用户会看到控制台弹出窗口。
命令行需要UAC提升,但不应要求任何用户交互。我们还使用安装程序安装文件,自定义操作运行After =“InstallFiles”。
我们如何阻止用户看到控制台?
答案 0 :(得分:7)
请注意,如果确实需要UAC提升,则需要确保它是延迟执行CA.以下是添加了命令行参数的手册中的示例。
<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
Value=""[#MyExecutable.exe]" /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文件的源代码,可以通过以下方式执行此操作:
答案 2 :(得分:0)
您只需为cmd.exe添加第二个命令“exit”
ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe & exit"
希望,它可以帮助你
答案 3 :(得分:0)
有一个鸡和蛋的问题,可执行文件在启动之前必须被标记为控制台应用程序,如果你想在没有控制台弹出的情况下启动这样的exe,它必须有它的进程用正确的旗帜创造。如果您的安装程序无法提供这些,则可以在其间使用第三个.exe。例如,Keybase安装程序启动this small utility, called keybaserq.exe,以便在后台运行持久性控制台应用程序而不会闪烁黑色窗口。它是开源的,你可以看到how the Keybase installer makes use of it - 没有闪烁的控制台窗口。