Как я могу перепроектировать установщик, который был написан с помощью ghost-installer? - PullRequest
1 голос
/ 10 июля 2009

У меня есть установщик, для которого у меня нет исходного кода. Мне нужно либо «обернуть» этот установщик, либо отредактировать его, чтобы добавить еще несколько файлов. Какой лучший способ сделать это? Как упоминается в заголовке, программа установки была написана с помощью программы установки ghost.

1 Ответ

2 голосов
/ 14 июля 2009

Поскольку это не MSI, вы не можете использовать Orca для редактирования самого установщика . И я уже написал пользовательских действий по установке и для моих установщиков MSI.

Поскольку у вас нет большого контроля (если таковой имеется) над вашим Ghost Installer, я бы, возможно, написал собственный исполняемый файл в дополнение к установщику, который может выполняться до или после установщика. Это создаст несколько дополнительных файлов для распространения среди ваших клиентов, но вы можете распространять их целиком в виде zip-архива.

Прежде всего, если вы хотите создать неуправляемый загрузчик так же, как Visual Studio для обеспечения установки необходимых компонентов, вы можете сделать это через MSBuild с помощью скрипта, подобного следующему:

<Project ToolsVersion="3.5" DefaultTargets="BuildBootstrapper" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <BootstrapperFile Include="Microsoft.Net.Framework.2.0">
      <ProductName>Microsoft .NET Framework 2.0</ProductName>
    </BootstrapperFile>
  </ItemGroup>

  <Target Name="BuildBootstrapper">
    <GenerateBootstrapper
      ApplicationFile="CustomInstallerExecutable.exe"
      ApplicationName="Pretty Title of Application Goes Here"
      BootstrapperItems="@(BootstrapperFile)"
      ComponentsLocation="Relative" />
  </Target>

</Project>

Это создаст файл «setup.exe», который является де-факто именем файла для любого загрузчика установщика. Фактически, если вы хотите, чтобы пользователь случайно не пропустил загрузчик и сразу перешел к установщику, вы можете спрятать установщик Ghost в папке «bin» или в другом месте в корне zip-архива. Таким образом, их единственная интуитивно понятная опция - это «setup.exe». Включите также файл «README.txt», если вам нужно быть предельно ясным ради клиента.

То, что также делает этот загрузчик, - это убедиться, что клиент имеет .NET 2.0 Framework в качестве предварительного условия, чтобы ваш «CustomInstallerExecutable.exe» мог быть написан на .NET, а не на неуправляемом языке. Фактически, этот сценарий MSBuild будет сбрасывать установщик .NET 2.0 Framework рядом с только что созданным загрузчиком (из-за значения «Relative» атрибута «ComponentsLocation»). Существуют и другие значения атрибутов, которые вы можете использовать, чтобы упростить для пользователя получение .NET Framework через Интернет, если вы обеспокоены тем, что ваши клиенты будут раздувать исходный размер загрузки Ghost Installer.

Теперь ваш «CustomInstallerExecutable.exe» (написанный на красивом управляемом C #) может сбрасывать дополнительные файлы на машине до (или после) запуска Ghost Installer. Ранее я написал некоторый код для запуска MSI из исполняемого файла .NET:

string msiString = "blahBlah.msi";

// Kick off Update installer
ProcessStartInfo startInfo = new ProcessStartInfo(
    "cmd.exe",
    "/c start /wait msiexec.exe /i " + msiString);
startInfo.WorkingDirectory = "bin";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;

Process process = new Process
{
    StartInfo = startInfo,
    EnableRaisingEvents = true
};
process.Exited += new EventHandler(process_Exited);

process.Start();

Я думаю, вы могли бы сделать что-то очень похожее, чтобы вызвать ваш Ghost Installer вместо MSI. Если вы запускаете этот исполняемый файл .NET до Ghost Installer, вы можете просто вызвать процесс Ghost Installer, а затем выйти из процесса «CustomInstallerExecutable.exe» и не ждать, пока сработает событие process.Exited. Это ожидание события больше подходит для запуска логики «после установки».

Удачи и надеюсь, что это полезно.

...