在.Net Framework 1.1下,如果采用Visual .Net 2003的打包程序,我们可以下载.Net 2003安装引导程序来帮助我们把.Net Framework和MDAC之类的打包进去。目前我没有找到.Net 2005的引导程序,很郁闷。采用.Net 2005做安装盘,最郁闷的地方在于,如果没有安装.Net Framework2.0,系统提醒安装,安装后,还需要再叫用户重新点安装程序进行安装。Boss说,必须傻瓜化地安装,不能叫用户点两次。更郁闷的是,程序用了MDAC2.8,在XP SP2后版本,会出现“严重错误”对话框,虽然不影响使用,但给用户体验很不好。怎么办?我只好用unmanaged的VC做了个检测程序(注册表检测)和运行需要的组件。这个程序没有考虑做成通用的,检测了.Net Framework2.0和MDAC 2.8,如果你觉得有用,你可以做成从配置文件里读取需要部署的组件,并自动运行部署。欢迎转载,但不允许删除如下网址:http://www.hzpal.com http://www.glassoo.com
代码如下:
// WCXSetup.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "WCXSetup.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
printf("警告:此窗口严禁手工关闭!如果您不小心关闭,请重新点安装程序!");
int nRetCode = 0;
if( NeedDotnetFramework() )
{
::StartExe("DOTNETFX.EXE");
}

if( NeedMDAC() )
{
::StartExe( "MDAC_TYP.EXE" );
}



return nRetCode;
}

void StartExe(const char* path)
{
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = path;
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
}

bool NeedMDAC()
{
HKEY hKey, hSub1key, hSub2key, hSub3key;
if (RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE", &hKey) == ERROR_SUCCESS)
{
if (RegOpenKey(hKey, "Classes", &hSub1key) == ERROR_SUCCESS)
{
if (RegOpenKey(hSub1key, "MDACVer.Version", &hSub2key) == ERROR_SUCCESS)
{
if (RegOpenKey(hSub2key, "CurVer", &hSub3key) == ERROR_SUCCESS)
{
char *szData;
DWORD dwType, dwLen;
szData = new char[101];
dwLen = 100;
if ( ::RegQueryValueEx(hSub3key, "", NULL, &dwType, (unsigned char *)szData, &dwLen ) == ERROR_SUCCESS )
{
::RegCloseKey( hSub3key );
if( strcmp( szData, "MDACVer.Version.2.8" ) > 0 )
{
return false;
}
}
else
{
::RegCloseKey( hSub3key );
}
}
::RegCloseKey( hSub2key );
}
::RegCloseKey( hSub1key );
}
::RegCloseKey( hKey );
}
return true;
}

bool NeedDotnetFramework()
{
HKEY hKey, hSub1key, hSub2key, hSub3key,hSub4key;
if (RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE", &hKey) == ERROR_SUCCESS)
{
if (RegOpenKey(hKey, "Microsoft", &hSub1key) == ERROR_SUCCESS)
{
if (RegOpenKey(hSub1key, ".NETFramework", &hSub2key) == ERROR_SUCCESS)
{
if (RegOpenKey(hSub2key, "policy", &hSub3key) == ERROR_SUCCESS)
{
if (RegOpenKey(hSub3key, "v2.0", &hSub4key) == ERROR_SUCCESS)
{
::RegCloseKey( hSub4key );
::RegCloseKey( hSub3key );
return false;
}
else
{
::RegCloseKey( hSub3key );
}
}
::RegCloseKey( hSub2key );
}
::RegCloseKey( hSub1key );
}
::RegCloseKey( hKey );
}
return true;
}

我不知道这个是不是最好的办法,请大家指点!听说Wise For .Net Installer 5.1版本支持.Net 程序的发布,不过没米:(
欢迎转载,但不允许删除如下网址:http://www.hzpal.com http://www.glassoo.com
代码如下:





























































































































欢迎转载,但不允许删除如下网址:http://www.hzpal.com http://www.glassoo.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架