WiX - CustomAction ExeCommand - Скрыть консоль - PullRequest
24 голосов
/ 03 марта 2010

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 04 марта 2010

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

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

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

  1. Создание библиотеки DLL CustomAction
  2. Вызов CustomAction в DLL (из WiX) для выполнения процесса путем скрытия окна консоли.
0 голосов
/ 19 августа 2016

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

0 голосов
/ 05 июля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...