bool CreateShortcut(const WCHAR *shortcutPath, const WCHAR *exePath, const WCHAR *args, const WCHAR *description, int iconIndex) { ScopedCom com; ScopedComPtr<IShellLink> lnk; HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *)&lnk); if (FAILED(hr)) return false; ScopedComQIPtr<IPersistFile> file(lnk); if (!file) return false; hr = lnk->SetPath(exePath); if (FAILED(hr)) return false; lnk->SetWorkingDirectory(ScopedMem<WCHAR>(path::GetDir(exePath))); // lnk->SetShowCmd(SW_SHOWNORMAL); // lnk->SetHotkey(0); lnk->SetIconLocation(exePath, iconIndex); if (args) lnk->SetArguments(args); if (description) lnk->SetDescription(description); hr = file->Save(shortcutPath, TRUE); return SUCCEEDED(hr); }