Значок рабочего стола установки NSIS, значок меню «Пуск» и «Отмена / Повторить / Ошибка игнорировать» - PullRequest
0 голосов
/ 24 апреля 2020

Недавно я сделал приложение PyQt5 и собрал его с помощью pyinstaller. Я сделал почтовый файл. Теперь я хотел использовать NSIS, чтобы получить установщик. Я перешел на страницу примера и скопировал следующий код «Простой установщик и деинсталлятор с пунктом меню Пуск» https://nsis.sourceforge.io/Simple_tutorials#Simple_installer_and_uninstaller_with_start_menu_item.

Я пытался читать документы, но я запутался между что такое установочный каталог, где находятся файлы установщика или где после установки некоторого программного обеспечения в windows в Program Files. Все установочные файлы видны в C: / Program Files / [Некоторые программы]. Это та папка? Также есть SetOutPath. Я тоже хочу подобное поведение, т.е. установщик должен иметь флажки для ярлыка на рабочем столе и в меню «Пуск». Он должен указывать на C: \ Program Files [Имя приложения], когда пользователь запускает установщик. В настоящее время он выдает ошибку Retry / Ignore / Abort при запуске с "a.nsi", скриптом с скопированным кодом. В противном случае, когда я пытаюсь использовать опцию make installer with zip file, я получаю хороший установщик, но он не помещает значок на рабочем столе или значок меню «Пуск», а каталог установки по умолчанию, который он показывает, - desktop.

Name "Mailer"
# define name of installer
OutFile "Mailer-install.exe"
# For removing Start Menu shortcut in Windows 7
RequestExecutionLevel user

# define installation directory
InstallDir $PROGRAMFILES


# start default section
Section

    # set the installation directory as the destination for the following actions
    SetOutPath $INSTDIR
    File "Mailer.zip"
    # create the uninstaller
    WriteUninstaller "$INSTDIR\uninstall.exe"

    # create a shortcut named "new shortcut" in the start menu programs directory
    # point the new shortcut at the program uninstaller
    CreateShortCut "$SMPROGRAMS\new shortcut.lnk" "$INSTDIR\uninstall.exe"
SectionEnd

# uninstaller section start
Section "uninstall"

    # first, delete the uninstaller
    Delete "$INSTDIR\uninstall.exe"

    # second, remove the link from the start menu
    Delete "$SMPROGRAMS\new shortcut.lnk"

# uninstaller section end
SectionEnd

<h3> The logs if required</h3> 
MakeNSIS v3.05 - Copyright 1999-2019 Contributors
See the file COPYING for license details.
Credits can be found in the Users Manual.

Processing config: C:\Program Files (x86)\NSIS\nsisconf.nsh
Processing default plugins: "C:\Program Files (x86)\NSIS\Plugins\x86-ansi\*.dll"
 + Banner::destroy
 + Banner::getWindow
 + Banner::show
 + BgImage::AddImage
 + BgImage::AddText
 + BgImage::Clear
 + BgImage::Destroy
 + BgImage::Redraw
 + BgImage::SetBg
 + BgImage::SetReturn
 + BgImage::Sound
 + Dialer::AttemptConnect
 + Dialer::AutodialHangup
 + Dialer::AutodialOnline
 + Dialer::AutodialUnattended
 + Dialer::GetConnectedState
 + InstallOptions::dialog
 + InstallOptions::initDialog
 + InstallOptions::show
 + LangDLL::LangDialog
 + Math::Script
 + StartMenu::Init
 + StartMenu::Select
 + StartMenu::Show
 + System::Alloc
 + System::Call
 + System::Copy
 + System::Free
 + System::Get
 + System::Int64Op
 + System::Store
 + System::StrAlloc
 + TypeLib::GetLibVersion
 + TypeLib::Register
 + TypeLib::UnRegister
 + UserInfo::GetAccountType
 + UserInfo::GetName
 + UserInfo::GetOriginalAccountType
 + VPatch::GetFileCRC32
 + VPatch::GetFileMD5
 + VPatch::vpatchfile
 + advsplash::show
 + nsDialogs::Create
 + nsDialogs::CreateControl
 + nsDialogs::CreateItem
 + nsDialogs::CreateTimer
 + nsDialogs::GetUserData
 + nsDialogs::KillTimer
 + nsDialogs::OnBack
 + nsDialogs::OnChange
 + nsDialogs::OnClick
 + nsDialogs::OnNotify
 + nsDialogs::SelectFileDialog
 + nsDialogs::SelectFolderDialog
 + nsDialogs::SetRTL
 + nsDialogs::SetUserData
 + nsDialogs::Show
 + nsExec::Exec
 + nsExec::ExecToLog
 + nsExec::ExecToStack
 + nsisdl::download
 + nsisdl::download_quiet
 + splash::show

!define: "MUI_INSERT_NSISCONF"=""

Changing directory to: "C:\Users\Dell\Desktop\New folder (3)\f"

Processing script file: "C:\Users\Dell\Desktop\New folder (3)\f\a.nsi" (ACP)
Name: "Mailer"
OutFile: "Mailer-install.exe"
InstallDir: "$PROGRAMFILES"
Section: ""
SetOutPath: "$INSTDIR"
File: "Mailer.zip" [compress] 57197161/57534535 bytes
WriteUninstaller: "$INSTDIR\uninstall.exe"
CreateShortcut: "$SMPROGRAMS\new shortcut.lnk"->"$INSTDIR\uninstall.exe"  icon:,0, nwd=0, showmode=0x0, hotkey=0x0, comment=
SectionEnd
Section: "uninstall"
Delete: "$INSTDIR\uninstall.exe"
Delete: "$SMPROGRAMS\new shortcut.lnk"
SectionEnd

Processed 1 file, writing output (x86-ansi):
warning 7998: ANSI targets are deprecated
Processing pages... Done!
Removing unused resources... Done!
Generating language tables... Done!
Generating uninstaller... Done!

Output: "C:\Users\Dell\Desktop\New folder (3)\f\Mailer-install.exe"
Install: 1 page (64 bytes), 1 section (2072 bytes), 5 instructions (140 bytes), 40 strings (726 bytes), 1 language table (198 bytes).
Uninstall: 1 page (128 bytes), 1 section (2072 bytes), 3 instructions (84 bytes), 39 strings (617 bytes), 1 language table (194 bytes).

Using zlib compression.

EXE header size:               36352 / 37888 bytes
Install code:                    728 / 2568 bytes
Install data:               57197165 / 57534547 bytes
Uninstall code+data:             909 / 1409 bytes
CRC (0x02F0CF53):                  4 / 4 bytes

Total size:                 57235158 / 57576416 bytes (99.4%)

1 warning:
  7998: ANSI targets are deprecated

1 Ответ

0 голосов
/ 24 апреля 2020

Вы сделали роковое изменение в примере сценария, вы изменили InstallDir на $PROGRAMFILES и не можете писать в $PROGRAMFILES, если вы не являетесь администратором с повышенными правами!

Чтобы предоставить пользователю возможность Чтобы создать ярлык или нет, поместите его в отдельную Section и добавьте страницу компонентов:

Name "MyApp"
OutFile "MyAppSetup.exe"
Unicode True
RequestExecutionLevel Admin ; Request UAC elevation
InstallDir "$ProgramFiles\$(^Name)"

Page Components
Page Directory
Page InstFiles

Uninstpage UninstConfirm
Uninstpage InstFiles

!include LogicLib.nsh

!macro EnsureAdminRights
  UserInfo::GetAccountType
  Pop $0
  ${If} $0 != "admin" ; Require admin rights on WinNT4+
    MessageBox MB_IconStop "Administrator rights required!"
    SetErrorLevel 740 ; ERROR_ELEVATION_REQUIRED
    Quit
  ${EndIf}
!macroend

Function .onInit
  SetShellVarContext All
  !insertmacro EnsureAdminRights
FunctionEnd

Function un.onInit
  SetShellVarContext All
  !insertmacro EnsureAdminRights
FunctionEnd


Section "Program files (Required)"
  SectionIn Ro
  SetOutPath $InstDir ; Sets the output directory for File instructions
  WriteUninstaller "$InstDir\Uninst.exe"
  File "/oname=$InstDir\MyApp.exe" "${NSISDIR}\Bin\MakeLangId.exe" ; Pretend that we have a real application to install
SectionEnd

Section "Start Menu shortcut"
  CreateShortcut /NoWorkingDir "$SMPrograms\$(^Name).lnk" "$InstDir\MyApp.exe"
SectionEnd


Section -Uninstall
  Delete "$InstDir\MyApp.exe"
  Delete "$InstDir\Uninst.exe"
  RMDir "$InstDir"

  Delete "$SMPrograms\$(^Name).lnk"
SectionEnd

Примечание. Это слегка измененная версия примера сценария install-shared.nsi. . Этот сценарий также регистрирует деинсталлятор с помощью панели управления / приложения настроек, что также следует делать в реальном инсталляторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...