Я только что создал пользовательский диалог с флажком, спрашивающим, хочет ли пользователь создать ярлык на рабочем столе. Я всегда использовал ярлык. Я не использую функцию AskText()
, так как планирую добавить еще несколько частей на эту страницу позже и хочу упростить эти несколько параметров на этой странице.Выполнение задачи создания ярлыка на рабочем столе
Я получаю элемент на своем рабочем столе, когда я бегу, но это не то, что я ожидаю. Цель, похоже, указывает на местоположение на самом рабочем столе, а не на фактический исполняемый файл. Кроме того, этот ярлык не удаляется при удалении (я предполагаю, что это нужно обрабатывать отдельно в любом случае), а ярлык требует прав администратора для ручного удаления (чего я не хочу по очевидным причинам).
Ниже приведен мой код InstallScript. Он находится в пользовательском действии, которое было вставлено после InstallFiles
.
function MyFunction(hMSI)
STRING szProgramFolder, szItemName, szCommandLine, szWorkingDir;
STRING szShortCutKey, szProgram, szParam, szIconPath;
NUMBER nIcon, nResult;
begin
szProgramFolder = FOLDER_DESKTOP;
szItemName = "myProgram";
szProgram = INSTALLDIR + "myProgram.exe" ;
LongPathToQuote (szProgram, TRUE);
szCommandLine = szProgram;
szWorkingDir = INSTALLDIR;
szIconPath = "";
nIcon = 0;
szShortCutKey = "";
nResult = AddFolderIcon (szProgramFolder, szItemName, szCommandLine,szWorkingDir,
szIconPath, nIcon, szShortCutKey, REPLACE);
end;
Я не совсем уверен, куда я иду неправильно здесь, хотя мое знание InstallShield (не говоря уже о InstallScript) является очень ограничено.
Это немедленное или отложенное пользовательское действие? отложенные пользовательские действия не инициализируют переменную INSTALLDIR. – yossiz74
@ yossiz74 - Я изменил его на немедленное действие, которое разместило его после ExecuteAction, и оно в значительной степени похоже работает. –
Отлично, я добавлю его в качестве ответа тогда – yossiz74