我有一个非常简单的程序,包含一个.NET 2.0 exe(Program.exe),它调用一个x86 Win32.dll(Lib.dll)。
我想将这些文件打包成一个名为Tool.exe的自解压缩文件(SFX)。Tool.exe将文件(Program.exe和Lib.dll)提取到Windows Temp系统目录中,然后调用Program.exe
这样我可以提供一个名为Tool.exe的单个文件.exe下载,就用户而言,他们只是运行Tool.exe而不是一个多文件程序。
WinRAR具有SFXfunction,并且能够自动启动一个解压缩的.exe文件,但它似乎没有给你select让它解压缩到Windows Temp目录(你可以指定绝对path,但是Temp目录的变化取决于什么版本的Windows)。 另外,它在提取时会popup一个窗口,这对我的目标来说太过于夸张了,就像用户刚刚启动我的程序一样。
如何将Windows服务从本地PC移动到虚拟专用服务器上
如何在订阅DWM组合/ Aero Glass禁用时引发的操作系统级事件?
如何在MS Windows上加载GTK Sharp主题
如何获得过去10年的夏令时间界限
PrincipalContext.ValidateCredentials会产生PrincipalOperationException
另外,是否有一种方法将本机Lib.dll捆绑到我编译的.NET可执行文件中,就像是一个“资源”?
我真的很想避免在MSI或甚至常规的.exe安装程序上做一个完整的工作,因为这是一件很痛苦的事情,即使是像NSIS这样简单的安装程序也是如此。
在Linux中运行Windows程序
wpf窗口位置的问题
无法findtypes或命名空间“Mono”
.NET和本机C ++应用程序之间进行通信的最佳方式
我应该在哪里存储适用于非漫游用户的机器范围的应用程序设置?
我倾向于使用7-zip和UPX来做到这一点,按照这些指示使其在执行/提取时运行批处理文件 。 下面是一个用于构建包含。 bin目录中的文件的EXE的示例CMD脚本:
pushd %~dp0 upx --ultra-brute 7zsd.sfx cd Bin ..7za a -mx=9 "..Program.7z" * cd .. copy /b 7zsd.sfx + Config.txt + Program.7z Program_Name.exe del Program.7z
;!@Install@!UTF-8! GUIMode="0" RunProgram="runme.cmd" ;!@InstallEnd@!
当然,你的里程可能会有所不同
NSIS有一个名为Zip2Exe的有用工具。 基本上,你给它一个zip文件,并指定提取文件夹(在你的情况下, $TEMP ),它会生成一个安装程序。
您可以以静默模式运行这样的安装程序(因此用户实际上看不到安装程序)。 因此,您可能能够安装Tool.exe并为您运行该程序。 安装程序可以是在运行之前首先写入临时文件的嵌入式资源。 然后,用户从不知道任何安装程序。 从他们的角度来看, Tool.exe做了一些工作,给出了一些“请稍候…”的反馈,然后开始运行你想运行的程序,然后Tool.exe退出。
编辑:事后看来,从Tool.exe提取并运行Program.exe (和您的dll),然后退出Tool.exe会更容易。 更好的是:让用户运行Program.exe (在加载之前将lib.dll写入磁盘)。
我希望这给你一些想法。 请注意,您可能在使用UAC和病毒扫描程序时遇到麻烦。
DotNetZip可以产生一个SFX,带有一个默认的提取目录。 在创建SFX时,将%TEMP%指定为默认提取位置,并且在SFX实际运行时,变量将被解析。 DotNetZip也可以在提取SFX后运行一个程序,该程序可以是提取的东西之一。
所以你可以使用DotNetZip来做你想做的事情。
本文解释了一个替代方案。 它演示了如何从.NET动态调用本地Win32 DLL。 使用这种技术,可以将库作为资源捆绑到.NET EXE中,然后在.NET EXE启动时提取库,然后将动态调用放入库中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。