1, 将CreateLink函数封装到MyDll.dll中, 并导出
BOOL WINAPI CreateLink(LPSTR szPath, LPSTR szDir, LPSTR szLink)
{
CoInitialize(NULL);
HRESULT hres;
IShellLink* psl;
IPersistFile* ppf;
WORD wsz[MAX_PATH];
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (void**)&psl);
if(FAILED(hres))
return FALSE;
psl->SetPath(szPath);
psl->SetWorkingDirectory(szDir);
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(FAILED(hres))
return FALSE;
MultiByteToWideChar(CP_ACP, 0, szLink, -1, wsz, MAX_PATH);
hres = ppf->Save(wsz, STGM_READWRITE);
ppf->Release();
psl->Release();
CoUninitialize();
return TRUE;
}
2, 在Install Shield的support 中引入。
3, Install shield中使用PlaceDesktopLinkEx代替AddFolderIcon(FOLDER_DESKTOP, .....);
prototype MyDll.CreateLink(POINTER, POINTER, POINTER);
export prototype PlaceDesktopLinkEx();
function PlaceDesktopLinkEx()
NUMBER nResult;
string szPath, strDllPath, strLinkPath, strDir;
begin
szPath = TARGET ^ "MyApp.exe";
LongPathToQuote(szPath, TRUE);
strDllPath = SUPPORTDIR ^ "MyDll.dll";
nResult = UseDLL(strDllPath);
strLinkPath = FOLDER_DESKTOP ^ "我的测试程序.lnk";
strDir = TARGET;
CreateLink(&szPath, &strDir, &strLinkPath);
UnUseDLL(strDllPath);
end;