我有一个安装程序,我没有任何源代码。我需要“包装”此安装程序或编辑它以添加更多文件。最好的方法是什么?正如标题所提到的,安装程序是用幽灵安装程序编写的。
答案 0 :(得分:2)
由于它不是MSI,因此您无法使用Orca to edit the installer itself。我之前也为MSI安装程序编写了custom install actions。
由于您对Ghost安装程序没有太多控制权(如果有),我可能会编写一个自定义可执行文件来补充安装程序,可以在安装程序之前或之后运行。这将创建一些额外的文件以分发给您的客户,但您可以将整个文件分发为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安装程序(因为“ComponentsLocation”属性的“Relative”值)。如果您担心将Ghost安装程序下载的原始下载量扩展到客户,则可以使用其他属性值来帮助用户通过Web获取.NET Framework。
现在,您的“CustomInstallerExecutable.exe”(以漂亮的托管C#编写)可以在运行Ghost安装程序之前(或之后)将额外文件丢弃在计算机上。我之前编写了一些代码来运行.NET可执行文件中的MSI:
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安装程序而不是MSI的东西。如果您在Ghost安装程序之前运行此.NET可执行文件,则只需调用Ghost安装程序进程,然后退出“CustomInstallerExecutable.exe”进程,而不是等待进程。要激活的事件。此事件等待将更多地用于运行“安装后”逻辑。
祝你好运,希望这有帮助。