Qt Installer Framework — Создать ярлык в меню «Пуск» для всех пользователей

#qt #qt-installer

#qt #qt-installer

Вопрос:

С помощью installer Framework я хотел бы создать установщик для моего приложения. Приложение устанавливается администратором на ПК. Затем приложение используется разными пользователями.

В установщике я создаю ярлыки из исполняемого файла в меню «Пуск».

Это выполняется в installscript.js командой:

 component.addOperation(“CreateShortcut”, “@TargetDir@/application.exe”, 
“@StartMenuDir@/Name of Application.lnk”, “workingDirectory=@TargetDir@”);
  

Проблема сейчас в том, что установщик создает ярлык в меню «Пуск» только для текущего пользователя, например, администратора.

Кроме того, программа удаления видна только для текущего пользователя. Когда я захожу в систему с другим пользователем, приложение не отображается в меню «Пуск».

Как можно создать ярлык, который виден в меню «Пуск» для всех пользователей?

Ответ №1:

Попробуйте

 component.addOperation("CreateShortcut", "@TargetDir@/application.exe", "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\<Name of Application>.lnk");
  

На самом деле, AllUsersStartMenuProgramsPath доступна переменная, но я только что попробовал ее, и, похоже, она сломана. С его помощью вставляются ссылки C: .

Как installer.value("os") , вы должны использовать installer.value("AllUsersStartMenuProgramsPath") в своем скрипте.

Смотрите последнюю документацию:http://doc-snapshot .qt-project.org/qtifw-master/scripting.html

Я думаю, что ошибка должна быть открыта в их баг-трекере:https://bugreports.qt-project.org/secure/Dashboard.jspa

Комментарии:

1. Я протестировал это сегодня, и переменная AllUsersStartMenuProgramsPath работает нормально, пока я использую ее в функции installer.value(), как вы описали. «@AllUsersStartMenuProgramsPath@/foo.lnk » однако не работает.

2. Обращается ли это также к записям в Programs and Features на панели управления Windows?

Ответ №2:

Это работает для меня:

 Component.prototype.createOperations = function()
{
    component.createOperations();
    console.log("creating start menu entries");
    if (systemInfo.productType === "windows") {
        component.addOperation("Mkdir", "@StartMenuDir@")
        component.addOperation("CreateShortcut", "@TargetDir@/README.txt", 
            "@StartMenuDir@/README.lnk",
            "workingDirectory=@TargetDir@", 
            "iconPath=%SystemRoot%/system32/SHELL32.dll",
            "iconId=2", "description=Open README file");
    }
}
  

Обратите внимание, что скрипт создает соответствующий каталог меню «Пуск» перед созданием ярлыков.

Комментарии:

1. Я на самом деле это не создает запись для всех пользователей, я неправильно истолковал вопрос. Я оставляю это здесь на случай, если это поможет кому-либо еще в любом случае.