Подтвердить что ты не робот

WiX - CustomAction ExeCommand - Скрыть консоль

У нас есть настраиваемое действие, которое запускает командную строку для работы как таковой:

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

Проблема заключается в том, что пользователь видит всплывающее окно консоли при выполнении команды.

Командная строка требует повышения UAC, но не требует вмешательства пользователя. Мы также устанавливаем файл с настройкой, запускаем пользовательские действия After = "InstallFiles".

Как мы запрещаем пользователю видеть консоль?

4b9b3361

Ответ 1

Обратите внимание, что если вам требуется повышение 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>

Ответ 2

Если у вас есть исходный код EXE файла, это то, что вы можете сделать. Создайте проект проекта EXE проекта Win32 вместо Консольного приложения.

Если вы не можете изменить исходный код EXE файла, вы можете сделать это:

  • Создание DLL CustomAction
  • Вызов CustomAction в DLL (из WiX) для выполнения процесса, скрывая окно консоли.

Ответ 3

Вам просто нужно добавить вторую команду "exit" для cmd.exe

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

Надеюсь, это поможет вам

Ответ 4

Проблема с цыпленком и яйцом связана с тем, что исполняемый файл должен быть помечен как консольное приложение перед его запуском, и если вы хотите запустить такой exe без появления консоли, он должен иметь свой процесс созданный с помощью правильных флагов. Если ваш установщик не может их предоставить, можно использовать третий .exe между ними. Например, установщик Keybase запускает эту небольшую утилиту для запуска постоянных консольных приложений в фоновом режиме без прошивки черных окон.