etre 2008年12月13日
在vista下创建快捷方式的问题!解决了在给100分。
我做了一个自己的安装程序,不是用installshield 和 windows installer.中间有段程序是用来为程序创建快捷方式的。这段代码如下:
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (PVOID *) &psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;

// Set the path to the shortcut target and add the description.
psl->SetPath(ExePath);
psl->SetWorkingDirectory(WorkingDirectory);
psl->SetArguments(Arguments);
psl->SetIconLocation(iconPath,0);
// Query IShellLink for the IPersistFile interface for saving the
// shortcut in persistent storage.
hres = psl->QueryInterface(IID_IPersistFile, (PVOID *) &ppf);
if (SUCCEEDED(hres))
{
WCHAR wszTemp[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, PathLink, -1, wszTemp, MAX_PATH);
// Save the link by calling IPersistFile::Save.
hres = ppf->Save(wszTemp, TRUE);
ppf->Release();
}
psl->Release();
}

这段代码在xp,2000上执行是完全没有问题的,由于我想执行的安装是每个用户有一份安装程序,也就是说我想把快捷方式创建到这个目录下:

C:\Users\ <user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ <companyName>

但是运行结果却是创建到了目录下:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\CCI

也就是说我本来想执行per-user installation,但是vista自动地执行了all-user installation.

其中wszTemp得到的值还是正确的C:\Users\ <user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ <companyName>

但是一经过hres = ppf->Save(wszTemp, TRUE),就被创建到了C:\ProgramData\Microsoft\Windows\Start Menu\Programs\CCI目录下,希望高手指教。

但我用同样的程序创建桌面快捷方式又是正确的。在C:\Users\ <user name>\AppData\Roaming\Microsoft\Windows\目录下
...全文
112 点赞 收藏 6
写回复
6 条回复

还没有回复,快来抢沙发~

发动态
发帖子
ATL
创建于2007-09-28

3022

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告