给程序加外壳

这两天有这么一个任务:写一个 给指定的EXE加一个外壳 的程序,

该外壳需要做如下工作:

1. 判断当前时间是否晚于核查时间,如果早于核查时间,运行原指定EXE

2. 若晚于核查时间,且没有新程序,从设定网址下载新程序

3. 若晚于核查时间,且有新程序,直接运行新程序

而改程序,需要能够设定原EXE路径,设定下载程序网址,设定核查时间

最初的解决方案是如此: 将外壳需要做的工作写成一个命令行程序,几个关键变量用占位字符代替。保存在txt中。运行程序时根据用户输入,动态替换txt中占位符之后进行动态编译。然后将生成的命令行与EXE一同用winrar打包。打包操作用命令行执行,并且采用解压到临时文件,且设定覆盖模式为不覆盖新文件。

一番折腾之后。客户要求不使用SFX.

在客户的提点之下,意识到了可以用vs的命令行编译。

遂调整为如下方案:

新建一个命令行的项目,将改项目至于打包程序debug目录下,根据打包程序输入动态调整改命令行代码,并且将指定原EXE作为嵌入的资源加载到命令行程序中。而改命令行程序中需要完成将嵌入的资源释放到本地临时文件夹中。(最初是在命令行中直接调用,这样的问题是针对不同程序可能没有办法直接执行,并且无法将下载的程序嵌入打包好的程序里)

时间: 2024-08-12 13:48:06

给程序加外壳的相关文章

.NET程序加壳的基本原理和方式浅析

.NET程序加壳的基本原理和方式浅析 加壳程序是一种常用的保护应用程序的办法,确切的说是一种加密办法.取名为壳,意思是说这种对程序的保护办法就像植物种子的外壳,咱们运用一段程序将咱们的主程序包裹在其间,不能轻易被其他人看见. 被加壳的程序在运转时先要运转一段附加的指令,这段附加的指令完结有关操作后会发动主程序. 加壳的办法大致可分为压缩和加密. 传统的非保管程序,加壳的目标是汇编指令:对.NET程序的加壳目标则是元数据和IL代码.对.NET程序的加壳,在理论和办法上并没有啥创新,目前都是直接承继

用C#给程序加启动画面并只允许一个应用程序实例运行

1. 启动画面类: public class SplashForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label lbl_version; /// <summary> /// 必需的设计器变量. /// </summ

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序加载事件)

在了解了PhoneGap中都有哪些事件之后,本节将开始对这些事件的用法进行详细地介绍.本节要介绍的是程序加载事件,也就是deviceready.pause和resume这3个事件. [范例4-2 程序加载事件的使用] 01 <!DOCTYPE html> 02 <html> 03 <head> 04 <meta charset="utf-8"> 05 <title>程序加载事件的使用</title> 06 <

linux 让一个程序开机自启动并把一个程序加为服务

本文以tomcat7为例 首先找到tomcat启动的目录,我的为 cd /usr/local/tomcat7/bin/ 这个目录 启动脚本是startup.sh 然后在/etc/rc.d/rc.local 这个文件中将tomcat的启动脚本添加进来即可. 重启操作系统,发现tomcat7可以开机自启动了. 将tomcat添加为服务 将 /usr/local/tomcat7/bin/catalina.sh 这个文件拷贝到 /etc/rc.d/init.d 这个目录并重命名为tomcat 使用命令

MFC程序加载DLL文件时运行到Loadlibray()语句就无法继续下去

我在学习Detour时,为了进行测试,就建立了一个DLL文件和一个MFC工程. 但是我的MFC程序加载DLL文件时运行到Loadlibray("XXX.dll")这条语句就无法继续下去,没有报错,VS2010也没有停止,还是处于编译运行状态. 可是我之前加载的别的DLL文件都可以运行,这应该是很简单的加载DLL文件的过程呀,就想是dll文件的代码错误?或是MFC工程错误?还是Dll工程错误? 于是 我就将dll内的代码 复制到原来可以运行的DLL文件中发现可以运行,那就是代码没错, 接

使用SplashScreenManager控件定制程序加载页面

需要devexpress版本在12.0及以上才支持 https://www.cnblogs.com/wuhuacong/p/6112461.html 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口 http://blog.csdn.net/archielau/article/details/37401443 ProgressPanel.WaitForm.SplashScreenManager http://blog.csdn.net/qq99

刚部署的程序加载不出来css,js以及图片

刚部署的程序加载不出来css,js以及图片,解决方式 需要在配置中加入静态资源 方法一: controller.xml中加入 <mvc:annotation-driven/> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <mvc

无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.m

Windows服务中程序发布之后会如下错误: 无法为具有固定名称"System.Data.SqlClient"的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer".请确保使用限定程序集的名称且该程序集对运行的应用程序可用.有关详细信息,请参阅 http://go.microsoft.com