0

我对编程并不感兴趣,所以如果这是一个愚蠢的问题,请原谅。

我知道那里有几个安装程序创建者,比如默认的 Visual Studio 安装程序项目、InstallShield、NSIS 等,但我认为如果我有自己的解决方案会很酷。

假设我想创建自己的安装程序创建者,这是一个我可以添加几个我想安装的文件并定义自己的脚本系统(可能基于 XML)的工具。创建一个工具来打包我添加到的所有文件。假设 zip 是一个简单的步骤。但是我如何开发能够构建可执行文件的东西呢?这是如何实现的?

感谢任何建议和有用的提示!

4

3 回答 3

2

我建议你看看Wix。Wix 是开源的,所以如果你不想编写一些安装程序代码,你可以为 Wix 源代码做出贡献。Wix 还允许您使用 C# 编写自己的自定义操作(如果愿意)。另外它是基于 xml 的(通常你的安装程序是一堆 xml 文件),所以它似乎很好地满足了你的需求。

于 2013-01-11T15:29:47.553 回答
2

不确定是否满足您的需求。这就是我如何将一些数据附加到filename基于名为BaseExecutable. 数据可以是 .zip 或其他任何文件。这BaseExecutable是某种安装程序(在我的情况下是 Win32 可执行文件),它从自身读取附加数据。数据的起始位置可以在生成的可执行文件的位置 44、45、46、47 处找到。我没有尝试使用任何 .NET exe

public void Create(string Filename, string BaseExecutable)
{
    FileStream Source = new FileStream(BaseExecutable, FileMode.Open, FileAccess.Read, FileShare.Read);

    file = new FileStream(Filename, FileMode.Create, FileAccess.Write, FileShare.None);

    byte[] buffer = new byte[65536];
    Source.Read(buffer, 0, 48);
    file.Write(buffer, 0, 44);

    writer = new BinaryWriter(file, Encoding.ASCII);
    writer.Write((uint)Source.Length);

    int count;
    while ( (count=Source.Read(buffer, 0, buffer.Length))>0)
        file.Write(buffer, 0, count);

    // append custom data here ...
}
于 2013-01-11T15:55:22.190 回答
1

一种简单的方法是拥有一个程序,该程序采用标准可执行文件并将您的数据附加到文件的正常结尾(使用“魔术词”)之后。“标准可执行文件”所做的只是读取自身,找到标记数据开始的魔法词并提取该数据。肯定还有其他更优雅的方法,尤其是使用更新的语言和运行时,但我提到的一种是基本的,即使在纯 C 中也可以实现。

或者,使用 .NET,您可以利用运行时编译器从库存代码动态创建可执行文件,我认为您还可以嵌入资源,就像在 VS 项目中嵌入资源一样。不过,我对这一点并不是 100% 肯定的。

于 2013-01-11T15:27:15.740 回答