Преобразовать существующий пакет в.exe, запущенный скрытым (без окна консоли)

Я ни в коем случае не программист, но мне по сути поручено именно это. Мне было поручено обновить сеть компьютеров с помощью нашей уже существующей установки дистрибутива, думаю, scccm, за исключением того, что я могу делать ТОЛЬКО файлы.exe / msi.

В любом случае, партия, которую я написал, работает фантастически; кроме того, что мне нужно, чтобы бежать тихо. По сути, вот задачи, которые он выполняет:

  1. Создает журнал на выделенном сетевом ресурсе с использованием% computername% и добавляет строку каждый раз, когда что-то происходит, и сообщает об успешном использовании, используя% errorlevel% с включенной отметкой времени и даты.
  2. Проверяет, запущена ли конкретная программа, если так, то она ждет 60 минут и пытается снова, если НЕТ, то проверяет версию, ранее установленную
  3. В зависимости от версии он будет использовать robocopy для замены устаревших файлов новыми.
  4. Затем устанавливает путь к имени TNS
  5. Конфигурирует только что установленную БД на основе имени компьютера
  6. Изменяет реестр
  7. Ставит иконку на рабочий стол
  8. сообщает о том, что все задачи выполнены в журнале должным образом и завершает работу.

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

Я попробовал несколько методов; iexpress, который прекрасно работает, но без тихой опции; Bat To EXE-конвертер, который работает, но отказывается компилировать, если я выбрал тихий; и, наконец, 7zip с использованием 7zS.sfx, но после компиляции он отказывается работать. Для всех exe-файлов, которые я искал, используя ресурсный хакер для настройки информации о программном обеспечении, пиктограмм, совместимости с Microsoft и т. Д. И т. Д. И т. Д. Я указал на установку INNO, но обнаружил, что она не может создавать флаги без вывода сообщений, и в большинстве статей просто говорится сделать и поставьте флаг, это плохое решение моей проблемы.

С чего мне начать?

1 ответ

Решение

Есть много простых способов запустить командный файл без окна консоли. Не нужно повторно реализовывать ваш командный файл.

Простой подход, который не требует какого-либо стороннего программного обеспечения, - это использование сценария VBScript или JScript, который запускает пакетный файл с использованием WScript.Shell.Run метод с intWindowStyle параметр установлен в 0 (= скрывает окно).

Цитируя ответ @Shaji на Как запустить пакетный файл без запуска "командного окна"?:

Сохраните следующее как wscript, например, hidecmd.vbs после замены "testing.bat" именем вашего пакетного файла.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Второй параметр oShell.Run является intWindowStyle значение, указывающее на внешний вид окна программы, а нулевое значение - для скрытого окна.

Ссылка здесь https://msdn.microsoft.com/en-us/library/d5fk67ky.aspx


Для других методов, см.:


Если вам действительно нужен.exe, вы можете использовать Inno Setup для его сборки. Просто запустите ваш пакетный файл в InitializeSetup Функция события и прервать "установку" впоследствии. Результирующий .exe не будет иметь графического интерфейса.

[Setup]
AppName=My Program
AppVersion=1.5
; Mandatory directive, but not actually used in this "installer"
DefaultDirName={pf}\My Program

#define SetupBatchFile "setup.bat"

[Files]
; Embed the batch file to the installer
Source: "{#SetupBatchFile}"; Flags: dontcopy

[Code]

function InitializeSetup(): Boolean;
var
  BatchPath: string;
  ResultCode: Integer;
begin
  { Extract the batch file }
  ExtractTemporaryFile('{#SetupBatchFile}');
  Log('Running batch file');
  BatchPath := ExpandConstant('{tmp}\{#SetupBatchFile}');
  if not Exec(BatchPath, '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
  begin
    Log('Error running batch file');
  end
    else
  begin
    Log(Format('Batch file finished with exit code %d', [ResultCode]));
  end;
  Log('Exiting');
  { Prevents the actual Inno Setup installer from running }
  Result := False; 
end;

Если ваш пакетный файл не нуждается в правах администратора, добавьте эту директиву в [Setup] раздел:

PrivilegesRequired=lowest
Другие вопросы по тегам