如何实现安装程序. 我想实现安装程序.现在的问题是要在开始菜单中的程序中建立一个组.还有就是建立一个快捷方式到桌面上.而且要可以从控制面板的添加删除程序里卸载.谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.使用Windows Installer SDK来开发安装程序。这种程序值得推荐。2.编写普通的Desktop 应用程序,不过必须自己负责注册表、卸载程序、快捷方式等(我们自己做过一个,拿C++写的,调试好累哦),东西比较多。3.使用现成的工具,我推荐使用Visual Studio.net自带的安装制造工具,功能强大而且使用简单,最主要的是不需要另外学习Script语言,使用任意一种自己熟悉的语言(VS.net支持的语言)来编写界面。而像InstallShiled它使用自己一套Script语言的。而且InstallShield的现在版本很复杂,盗版不好找:)至于Wise,没有用过,不敢说。 那我就结束详细一点吧,你看看是不是能用1.开始菜单中实现安装程序组,就是获取当前系统的开始菜单路径,在其中建立一个文件夹。以下代码是获取系统开始菜单路径: TCHAR szPath[MAX_PATH]; ZeroMemory(szPath, sizeof(szPath)); if (!::SHGetSpecialFolderPath(NULL, szPath, CSIDL_COMMON_PROGRAMS, FALSE)) // Win2000 { if (!::SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAMS, FALSE)) // Win98 throw -2; }2.Link文件其实COM接口,比较麻烦,见以下这个函数:BOOL CreateLink( LPCTSTR lpszPath, //快捷方式对应的目标文件的全路径 LPCTSTR lpszLink, //快捷方式的全路径 LPCTSTR lpszWorkingDirectory,//工作目录 LPCTSTR lpszIconFile, // 图标文件 int nIcon // 图标INDEX ){ ASSERT((lpszPath != NULL) && (lpszLink != NULL) && (lpszWorkingDirectory != NULL) && (lpszIconFile != NULL)); try { HRESULT hres; IShellLink * psl = NULL; IPersistFile* ppf = NULL; WORD wsz[MAX_PATH]; hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl); if(FAILED(hres)) goto cleanup; psl->SetPath(lpszPath); psl->SetWorkingDirectory(lpszWorkingDirectory); hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf); if(FAILED(hres)) goto cleanup; hres = psl->SetIconLocation(lpszIconFile, nIcon); if(FAILED(hres)) goto cleanup; MultiByteToWideChar(CP_ACP, 0, lpszLink, -1, wsz, MAX_PATH); hres = ppf->Save(wsz, STGM_READWRITE); cleanup: if(ppf) ppf->Release(); if(psl) psl->Release(); } catch(_com_error e) { TRACE(ReportError(e)); return FALSE; } return TRUE;} 这段代码执行错误通常是当前线程中没有初始化COM Library。3.控制面板中添加删除文件,是在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL增加一个目录。该目录名称就会显示在控制面板中。在该目录下填写一个子项UnistallString就能激活控制面板的该程序的“删除”按钮。该项的值就是你编写的卸载程序的全路径。具体怎么做就仁者见仁吧,呵呵。 图片按钮的实现! OpenMP和manifest,了解openmp的请进 结交些喜欢做游戏的朋友,自己做了个垃圾的战斗引擎 关于多个线程情况下调用 WSAStartup 函数的问题 高分求源代码, 基于事件触发的非阻塞异步的多线程SOCKET. 怎样遍历一个目录下的所有文件?? 怎样从VS98里面单独安装VC98?(60分) vector在Release模式下出错 如何使用dll中toolbar资源? 如何截获一个打印消息? gina的两个问题 代理服务器问题。急!!!
2.编写普通的Desktop 应用程序,不过必须自己负责注册表、卸载程序、快捷方式等(我们自己做过一个,拿C++写的,调试好累哦),东西比较多。
3.使用现成的工具,我推荐使用Visual Studio.net自带的安装制造工具,功能强大而且使用简单,最主要的是不需要另外学习Script语言,使用任意一种自己熟悉的语言(VS.net支持的语言)来编写界面。而像InstallShiled它使用自己一套Script语言的。而且InstallShield的现在版本很复杂,盗版不好找:)至于Wise,没有用过,不敢说。
1.开始菜单中实现安装程序组,就是获取当前系统的开始菜单路径,在其中建立一个文件夹。以下代码是获取系统开始菜单路径:
TCHAR szPath[MAX_PATH];
ZeroMemory(szPath, sizeof(szPath));
if (!::SHGetSpecialFolderPath(NULL, szPath, CSIDL_COMMON_PROGRAMS, FALSE)) // Win2000
{
if (!::SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAMS, FALSE)) // Win98
throw -2;
}
2.Link文件其实COM接口,比较麻烦,见以下这个函数:
BOOL CreateLink(
LPCTSTR lpszPath, //快捷方式对应的目标文件的全路径
LPCTSTR lpszLink, //快捷方式的全路径
LPCTSTR lpszWorkingDirectory,//工作目录
LPCTSTR lpszIconFile, // 图标文件
int nIcon // 图标INDEX
)
{
ASSERT((lpszPath != NULL) && (lpszLink != NULL) &&
(lpszWorkingDirectory != NULL) && (lpszIconFile != NULL)); try
{
HRESULT hres;
IShellLink * psl = NULL;
IPersistFile* ppf = NULL;
WORD wsz[MAX_PATH];
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
if(FAILED(hres))
goto cleanup;
psl->SetPath(lpszPath);
psl->SetWorkingDirectory(lpszWorkingDirectory);
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(FAILED(hres))
goto cleanup;
hres = psl->SetIconLocation(lpszIconFile, nIcon);
if(FAILED(hres))
goto cleanup;
MultiByteToWideChar(CP_ACP, 0, lpszLink, -1, wsz, MAX_PATH);
hres = ppf->Save(wsz, STGM_READWRITE);
cleanup:
if(ppf) ppf->Release();
if(psl) psl->Release();
}
catch(_com_error e)
{
TRACE(ReportError(e));
return FALSE;
} return TRUE;
}
这段代码执行错误通常是当前线程中没有初始化COM Library。
3.控制面板中添加删除文件,是在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL增加一个目录。该目录名称就会显示在控制面板中。在该目录下填写一个子项UnistallString就能激活控制面板的该程序的“删除”按钮。该项的值就是你编写的卸载程序的全路径。具体怎么做就仁者见仁吧,呵呵。