static bool CreateAppShortcut(bool allUsers) { ScopedMem<WCHAR> shortcutPath(GetShortcutPath(allUsers)); if (!shortcutPath.Get()) return false; ScopedMem<WCHAR> installedExePath(GetInstalledExePath()); return CreateShortcut(shortcutPath, installedExePath); }
/* メインダイアログ用 WM_INITDIALOG 処理ルーチン */ BOOL TInstDlg::EvCreate(LPARAM lParam) { GetWindowRect(&rect); int cx = ::GetSystemMetrics(SM_CXFULLSCREEN), cy = ::GetSystemMetrics(SM_CYFULLSCREEN); int xsize = rect.right - rect.left, ysize = rect.bottom - rect.top; ::SetClassLong(hWnd, GCL_HICON, (LONG_PTR)::LoadIcon(TApp::GetInstance(), (LPCSTR)SETUP_ICON)); MoveWindow((cx - xsize)/2, (cy - ysize)/2, xsize, ysize, TRUE); Show(); // プロパティシートの生成 staticText.AttachWnd(GetDlgItem(INSTALL_STATIC)); propertySheet = new TInstSheet(this, &cfg); // 現在ディレクトリ設定 char buf[MAX_PATH], setupDir[MAX_PATH]; TRegistry reg(HKEY_LOCAL_MACHINE, BY_MBCS); // タイトル設定 if (IsWinVista() && TIsUserAnAdmin()) { GetWindowText(buf, sizeof(buf)); strcat(buf, " (Admin)"); SetWindowText(buf); } // Program Filesのパス取り出し if (reg.OpenKey(REGSTR_PATH_SETUP)) { if (reg.GetStr(REGSTR_PROGRAMFILES, buf, sizeof(buf))) MakePath(setupDir, buf, FASTCOPY); reg.CloseKey(); } // 既にセットアップされている場合は、セットアップディレクトリを読み出す if (reg.OpenKey(REGSTR_PATH_UNINSTALL)) { if (reg.OpenKey(FASTCOPY)) { if (reg.GetStr(REGSTR_VAL_UNINSTALLER_COMMANDLINE, setupDir, sizeof(setupDir))) { GetParentDir(setupDir, setupDir); } reg.CloseKey(); } reg.CloseKey(); } if (!cfg.startMenu || !cfg.deskTop) { GetShortcutPath(&cfg); } SetDlgItemText(FILE_EDIT, cfg.setupDir ? toA(cfg.setupDir) : setupDir); CheckDlgButton(cfg.mode == SETUP_MODE ? SETUP_RADIO : UNINSTALL_RADIO, 1); ChangeMode(); if (cfg.runImme) PostMessage(WM_COMMAND, MAKEWORD(IDOK, 0), 0); return TRUE; }
static bool RemoveShortcut(bool allUsers) { ScopedMem<WCHAR> p(GetShortcutPath(allUsers)); if (!p.Get()) return false; bool ok = DeleteFile(p); if (!ok && (ERROR_FILE_NOT_FOUND != GetLastError())) { LogLastError(); return false; } return true; }