在vista下创建快捷方式的问题!解决了在给100分。
etre 2008-12-13 03:20:52 我做了一个自己的安装程序,不是用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\目录下