求教手写代码制作安装程序,欲推荐工具者免进 情景很简单,我写了一个软件,想做个安装程序。就假设这个软件是一个显示“Hello World”的MFC应用程序。讨教手写安装程序的方法,过程,原理等。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是很明白LZ在说什么,一个应用程序安装?安装what? 你找一个自解压的程序源代码(projectcode上面就有),安装过程就是自解压到一个目录,并写注册表 复杂一点的话使用CopyFile、MoveFile等文件操作API写一个对应的程序即可。简单的话写一个脚本按照即可。按照时双击bat文件即可 首先,本人的结贴率实在不需要膜拜,因为本人不是神。其次,按照大伙的说法,我给用户安装程序的时候,岂不是要连我程序的.exe文件都要一起弄出去?OK,我再说下我的意思,做一个像QQ客户端那样的安装程序! 另,如果各位有这方面的源代码,还请借我参考一下。本人的邮箱:[email protected] 如果你想把所有东西都做成一个exe可以把需要的东西全都放到资源里然后安装的话就是释放出来 你有示例吗?我开始用InstallShield 12做了一个,但是发现那界面太死板,没法改,虽然可以替换些图片,自己选择些对话框,但毕竟不如自己设计的对话框自由灵活。我之前都没有做过这方面的事情,所以最好有源代码看看。 安装程序我没自己写过不过操作资源的话你可以看看我的博客http://blog.csdn.net/xianglitian/archive/2010/05/23/5618817.aspx 主要就是拷贝文件、注册dll或者系统服务之类的,不复杂的 哦,看来问题又回到原点了,我最好用现成的工具,如InstallShield? 想要手写安装程序。可以自己写一个EXE程序作为安装程序,也不必把所有待安装的文件都集成到这个EXE里面,只要把待安装的文件放到安装程序同一个目录下即可,你写的安装程序可以用CopyFolder的方法来安装,这样实现起来很简单。如果要求是一个单独EXE的安装程序,就把你整个目录打包成一个自解压的EXE压缩包,然后选好自动运行的程序是你的安装程序即可。 1、建一个基于Dialog类的MFC项目,界面丰俭由己2、将需要拷贝的文件资源以项目自定义资源的形式添加进去,比如命名为"FILE"3、安装的过程就是用程序: 创建安装目录 复制还原文件 写注册表 创建程序运行环境 创建程序启动组和桌面快捷方式如下是一个将添加到项目中的“FILE”资源还原为文件的函数,供参考:BOOL WriteFileResource(UINT nID, CString strFileName){ HRSRC hRes; HINSTANCE hInst = AfxGetResourceHandle(); BOOL bResult = FALSE; DWORD dwLen=0; hRes = FindResource(hInst,MAKEINTRESOURCE(nID), _T("FILE")); if (hRes != NULL) { dwLen = SizeofResource(hInst, hRes); if (dwLen > 0) { HGLOBAL hGlob = LoadResource(hInst, hRes); if (hGlob != NULL) { LPVOID lpData = LockResource(hGlob); if (lpData != NULL) { CFile f; if(f.Open(strFileName,CFile::modeCreate|CFile::modeWrite)) { f.WriteHuge(lpData,dwLen); f.Close(); bResult=TRUE; } } FreeResource(hGlob); } } } return bResult;} 为什么一定是InstallShield,打包工具多的事,有些一些支持脚本编程,你想做成什么样都行。同样,鉴于你的标题,具体什么工具我也就说了。 OMG,到现在,我开始感觉我的标题写的太武断了,甚至于开始渐渐埋没各位伟大的想法了。请各位各抒己见,不必拘泥于标题。我也在考虑InstallShield,但这玩意貌似有点复杂,我想通过脚本来自定义安装界面,发现处处捉襟见肘,又找不到全面而详细些的相关教程。ok1234567先生的代码和xianglitian先生的代码可以结合起来,然后续工作仍旧颇多。继续听取各位的真知灼见... 完整的安装程序,要考虑卸载,要有安装日志,安装一半出错要支持回滚操作,要可以检查系统依赖项(common DLL或者COM组件之类),还要检查这些东西的版本....所以说是个大工程,楼主加油 就是普通的应用程序,你爱怎么做就怎么做。其实就是:1,让用户选择安装的目录2,拷贝文件(你的文件一般是事先打包成 ZIP 文件,作为资源放在安装程序里)3,注册DLL,注册服务,写一些注册表配置文件等4,提示成功卸载也是一样的应用程序,只是你要事先把卸载程序做好并放在安装程序里一起安装即可。我做过的,很早很早以前的事情了,那时候不知道有专门的安装脚本,老费劲了,建议您还是不要尝试呵呵,很辛苦。 用NSIS脚本,应该不是工具吧。以前,我就用NSIS写了个差不多和QQ2010版安装包一模一样的(是差不多了,没有QQ的皮肤漂亮了)。用脚本确实很方便,好多常用的功能,它们的库都有。 求OpenCv中Mat数据在MFC中显示方法 关于Base64编码实现的问题 在一个工作线程中使用CSocket有什么顾忌,总是第二次就出错? status bar 怎样能让长度改变的字符串刚好显示在pane中 字符到整数 关于MSDN一个很郁闷的问题 网络方面的一个问题 有关mfcdll导出类的问题,高手请进 socket编程下传送数据的问题!在线等待,急!!! 怎样判断系统环境是否支持DIRECTSOUND? VS2010中如何指定项目头文件路径? 基于对话框 vs2008 #include"fstream.h"该放在哪个文件里?
其次,按照大伙的说法,我给用户安装程序的时候,岂不是要连我程序的.exe文件都要一起弄出去?OK,我再说下我的意思,做一个像QQ客户端那样的安装程序!
你有示例吗?我开始用InstallShield 12做了一个,但是发现那界面太死板,没法改,虽然可以替换些图片,自己选择些对话框,但毕竟不如自己设计的对话框自由灵活。我之前都没有做过这方面的事情,所以最好有源代码看看。
不过操作资源的话你可以看看我的博客
http://blog.csdn.net/xianglitian/archive/2010/05/23/5618817.aspx
2、将需要拷贝的文件资源以项目自定义资源的形式添加进去,比如命名为"FILE"
3、安装的过程就是用程序:
创建安装目录
复制还原文件
写注册表
创建程序运行环境
创建程序启动组和桌面快捷方式如下是一个将添加到项目中的“FILE”资源还原为文件的函数,供参考:BOOL WriteFileResource(UINT nID, CString strFileName)
{
HRSRC hRes;
HINSTANCE hInst = AfxGetResourceHandle();
BOOL bResult = FALSE; DWORD dwLen=0; hRes = FindResource(hInst,MAKEINTRESOURCE(nID), _T("FILE"));
if (hRes != NULL)
{
dwLen = SizeofResource(hInst, hRes);
if (dwLen > 0)
{
HGLOBAL hGlob = LoadResource(hInst, hRes);
if (hGlob != NULL)
{
LPVOID lpData = LockResource(hGlob); if (lpData != NULL)
{
CFile f;
if(f.Open(strFileName,CFile::modeCreate|CFile::modeWrite))
{
f.WriteHuge(lpData,dwLen);
f.Close();
bResult=TRUE;
}
}
FreeResource(hGlob);
}
}
}
return bResult;
}
同样,鉴于你的标题,具体什么工具我也就说了。
我也在考虑InstallShield,但这玩意貌似有点复杂,我想通过脚本来自定义安装界面,发现处处捉襟见肘,又找不到全面而详细些的相关教程。
ok1234567先生的代码和xianglitian先生的代码可以结合起来,然后续工作仍旧颇多。
继续听取各位的真知灼见...
其实就是:
1,让用户选择安装的目录
2,拷贝文件(你的文件一般是事先打包成 ZIP 文件,作为资源放在安装程序里)
3,注册DLL,注册服务,写一些注册表配置文件等
4,提示成功卸载也是一样的应用程序,只是你要事先把卸载程序做好并放在安装程序里一起安装即可。我做过的,很早很早以前的事情了,那时候不知道有专门的安装脚本,老费劲了,建议您还是不要尝试呵呵,很辛苦。
以前,我就用NSIS写了个差不多和QQ2010版安装包一模一样的(是差不多了,没有QQ的皮肤漂亮了)。
用脚本确实很方便,好多常用的功能,它们的库都有。