目前我有一个VBScript"应用程序"支持发送到客户端运行,然后客户端发回一个包含结果的HTML文件。客观地说,输出的性质与Absolute Dynamics的Syscomp.exe相似,只是我的是一个.vbs文件,没有"比较"功能。
问题是:对该支持工具的要求不断变化,其范围/用途越来越大——我发现VBScript太大了,不再是合适的工具。理想情况下,我的新工具会有一个可定制的机制。例如,我不必对所有需求/要查找的内容进行硬编码,而是可以有一个配置文件,如App.config,或者更好的是,有我自己的标记模式的XML文件,可以根据每个客户端的需要作为应用程序的一部分提供。注意:我要求"不安装",因为这会不断变化,安装程序会让它变得不那么灵活;我们不会每次发送时都要求客户安装。
我想要的解决方案:我需要转到一个更通用的平台。Net非常理想,因为我们已经是一家.Net商店了。虽然如果使用.Net,我无法像使用当前VBScript(单个实体)那样想出一个分发解决方案,那么如果提到其他通用编程框架,我会考虑它们。
我尝试过的:
-
DotNetZip,感谢Cheeso在这个SO问题上的帮助:从压缩的"zip"文件运行.Net应用程序。我可以使用它来发布一个带有支持DLL和App.config的.Net EXE,所有这些都封装在一个自解压的ZIP中。不幸的是,这在WindowsXP中不起作用,除非我遗漏了什么。编辑:确认这是Windows XP和Windows Vista的限制,而不是DotNetZip的限制我需要我的解决方案在XP上工作(许多客户端都有XP或Windows2003Server的服务器场)
-
7Zip-不能满足我的需求,因为在"构建"我的解决方案后,我无法将.config添加到.7z存档中。我可以将文件添加到在DotNetZip中创建的SFX中,只需将其重命名为".zip",添加新的.config,然后删除.zip扩展名。
-
NBox将不起作用,因为打包任何配置文件(例如app.config)都需要成为我构建过程的一部分。我需要一个配置,我可以在构建过程之后/之外的任何时候简单地"插入",并将其作为发货的最终产品的一部分
-
Coffee Cup的Zip Wizzard无法在没有用户干预的情况下打开文件。也不允许运行EXE后解压
-
NirSoft的Zip安装程序。不符合我的要求,因为它仍然提示最终用户在哪里安装文件。
-
ZIP 2安全EXE。不幸的是,这也没有成功,尽管我记不起的缺点是什么
-
NAR。这不起作用,因为它需要运行一个安装程序。除此之外,它可能会成功。
问题:
- 考虑到我的要求,这可能吗?如果是这样的话,我从哪里开始?例如,从上面提到的第三方开始,或者从我错过的一方开始
- 是否有人遇到过与我类似的情况,但选择了不同于单个文件/实体应用程序的路径,并希望共享
要求:
- 必须是单个实体(例如EXE或ZIP)
- 必须能够支持至少一个配置文件,支持DLL等。一个"健壮"的应用程序。编辑:例如,在我的代码构建完成后,可以将其压缩为自解压ZIP。任何人都可以通过XML配置"自定义"它,然后将.exe重命名为.zip,放入他们的配置中,然后一起发送
- 必须在XP和forward中工作。编辑:我们假设.Net运行时已安装(至少v3.5)
从根本上说,如果没有一些外部"东西",你就无法用.net应用程序支持XP——XP没有标准安装任何版本的.net,所以你可能需要用户安装.net运行时才能让你的应用程序工作。从好的方面来说,如果你使用.net 4.0,那么当你运行程序时,它会告诉用户他们需要.net 4运行时,而不是像以前的.net应用程序那样简单地崩溃。
如果我们假设预先安装.net一次是可以的,那么有很多选择:
您可以将所有代码放入一个项目中,从而构建一个单独的程序集(.exe)
或者,如果您有多个dll,您可以使用ILMerge等工具在发货前将它们全部合并到一个.exe中,或者您可以将这些dll作为数据资源嵌入到.exe中,然后使用应用程序的AssemblyResolve事件允许您根据系统需要从资源加载dll数据。或者将dll嵌入为数据文件,然后"自动安装"它们(将它们保存到.exe旁边的磁盘或GAC中),这是程序在调用以这种方式提供的任何dll之前所做的第一件事。
另一方面,您的应用程序必须是独立的-它所需的任何设置/首选项/资源都需要由应用程序本身设置-例如,您可以从注册表中读取首选项设置,如果不存在,则使用默认值。如果您有一个XML配置文件,那么将其作为资源嵌入,然后直接从资源中读取,或者在启动时自动安装,这样您的应用程序就可以"自行安装"并完全独立。