25

我们已经获得了一个运行命令行的自定义操作,如下所示:

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

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

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

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

4

4 回答 4

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>
于 2010-03-03T23:44:59.923 回答
2

如果您有 EXE 文件的源代码,您可以这样做。制作 EXE 项目Win32 Application项目而不是Console Application

如果无法修改 EXE 文件的源代码,可以通过以下方式进行:

  1. 创建自定义操作 DLL
  2. 通过隐藏控制台窗口,调用 DLL(来自 WiX)中的 CustomAction 来执行进程。
于 2010-03-03T16:37:00.843 回答
1

有一个先有鸡还是先有蛋的问题,一个可执行文件在启动之前必须被标记为控制台应用程序,如果你想在不弹出控制台的情况下启动这样的 exe,它必须使用正确的标志。如果您的安装程序无法提供这些,则可以在两者之间使用第三个 .exe。例如,Keybase 安装程序会启动这个名为 keybaserq.exe 的小实用程序,以便在后台运行持久的控制台应用程序,而不会出现闪烁的黑色窗口。它是开源的,您可以看到 Keybase 安装程序如何使用它- 没有闪烁的控制台窗口。

于 2016-08-19T17:56:19.673 回答
0

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

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

希望,对你有帮助

于 2012-07-04T20:05:18.027 回答