«Доступ запрещен» при запуске установщика с CreateAppDir = no и PrivilegesRequired = low - PullRequest
1 голос
/ 09 июля 2020

Я получаю «Доступ запрещен» ошибка прямо из коробки.

Вот мой .iss файл:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "MyApp"
#define MyAppVersion "1.5"
#define MyAppPublisher "InteXX"
#define MyAppURL "https://www.intexx.com/"
#define MyAppExeName "MyApp.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{2F651F6A-6F25-4B73-BC69-C2DC1E04420F}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=no
; Remove the following line to run in administrative install mode (install for all users.)
PrivilegesRequired=lowest
OutputBaseFilename=MyApp
SetupIconFile=D:\Dev\Projects\Testing\MyApp\MyApp\Icon.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "D:\Dev\Projects\Testing\MyApp\Config\bin\Debug\Config.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Work\AppData\Local\InteXX\MyApp\Releases\Setup.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Run]
Filename: "{tmp}\MyApp\Config.exe"; Flags: waituntilterminated skipifdoesntexist
Filename: "{tmp}\MyApp\Setup.exe"; Flags: waituntilterminated skipifdoesntexist

.. .и вот сообщение об ошибке:

Oops!

There's это Q & A , в котором обсуждается та же ошибка, но сценарий немного отличается от моего. OP пытается открыть файл после успешной установки. Я пытаюсь запустить программу установки в первую очередь.

Я попытался немного изменить значение DestDir:

DestDir: "{app}\MyApp";

... и:

DestDir: "{app}\MyApp\";

Однако и это не удалось.

Некоторые соображения:

  • Setup.exe - это Сгенерированный белкой установочный файл
  • Config.exe - это небольшой исполняемый файл-заглушка, который ничего не делает, кроме установки переменной среды SQUIRREL_TEMP, чтобы указать пользовательскую папку установки для MyApp
  • Единственная причина, по которой я вообще использую Inno, заключается в том, что я может установить значение переменной перед запуском Squirrel
  • Я намеренно пропускаю любой целевой каталог в моем .iss файле, поскольку Squirrel будет использовать значение, содержащееся в переменной

Учитывая выше, как мне изменить мой файл .iss для успешной установки?

Редактировать 1: Согласно предложению Лекса в комментариях, я внес некоторые изменения в свой .iss файл:

[Files]
Source: "D:\Dev\Projects\Testing\MyApp\Config\bin\Debug\Config.exe"; DestDir: "{tmp}"; Flags: ignoreversion
Source: "D:\Dev\Projects\Testing\MyApp\MyApp\bin\Debug\Setup.exe"; DestDir: "{tmp}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Run]
Filename: "{tmp}\Config.exe"; Flags: waituntilterminated skipifdoesntexist; WorkingDir: {tmp}
Filename: "{tmp}\Setup.exe"; Flags: waituntilterminated skipifdoesntexist; WorkingDir: {tmp}

Однако проблема не устранена.

Редактировать 2: По запросу Мартина в комментариях, вот файл журнала:

2020-07-11 11:36:03.621   Log opened. (Time zone: UTC-08:00)
2020-07-11 11:36:03.621   Setup version: Inno Setup version 6.0.5 (u)
2020-07-11 11:36:03.621   Original Setup EXE: D:\Dev\Projects\Testing\MyApp\MyApp\Output\MyApp.exe
2020-07-11 11:36:03.621   Setup command line: /SL5="$2E1D68,3097553,911872,D:\Dev\Projects\Testing\MyApp\MyApp\Output\MyApp.exe" 
2020-07-11 11:36:03.622   Windows version: 10.0.18363  (NT platform: Yes)
2020-07-11 11:36:03.622   64-bit Windows: Yes
2020-07-11 11:36:03.622   Processor architecture: x64
2020-07-11 11:36:03.622   User privileges: None
2020-07-11 11:36:03.625   Administrative install mode: No
2020-07-11 11:36:03.625   Install mode root key: HKEY_CURRENT_USER
2020-07-11 11:36:03.713   64-bit install mode: No
2020-07-11 11:36:03.719   Created temporary directory: C:\Users\Work\AppData\Local\Temp\is-1AIP0.tmp
2020-07-11 11:36:07.329   Found 2 files to register with RestartManager.
2020-07-11 11:36:07.329   Calling RestartManager's RmGetList.
2020-07-11 11:36:07.347   RmGetList finished successfully.
2020-07-11 11:36:07.348   RestartManager found no applications using one of our files.
2020-07-11 11:36:07.431   Starting the installation process.
2020-07-11 11:36:07.448   Directory for uninstall files: C:\WINDOWS
2020-07-11 11:36:07.448   Creating new uninstall log: C:\WINDOWS\unins000.dat
2020-07-11 11:36:07.448   Fatal exception during installation process (Exception):
                          CreateFile failed; code 5.
                          Access is denied.
2020-07-11 11:36:07.448   Exception message:
2020-07-11 11:36:07.448   Message box (OK):
                          CreateFile failed; code 5.
                          Access is denied.
2020-07-11 11:36:11.110   User chose OK.
2020-07-11 11:36:11.110   Message box (OK):
                          Setup was not completed.
                          
                          Please correct the problem and run Setup again.
2020-07-11 11:36:12.193   User chose OK.
2020-07-11 11:36:12.193   Rolling back changes.
2020-07-11 11:36:12.211   Starting the uninstallation process.
2020-07-11 11:36:12.211   Uninstallation process succeeded.
2020-07-11 11:36:13.712   Deinitializing Setup.
2020-07-11 11:36:13.783   Log closed.

Я вижу, где сейчас возникает проблема, но все еще не понимаю, как ее исправить. . Очевидно, мне нужно поместить файл (ы) удаления где-нибудь, кроме C:\WINDOWS, но я пока не знаю, как это сделать.

1 Ответ

1 голос
/ 12 июля 2020

Ваш установщик имеет CreateAppDir установлен на no, в этом случае согласно документации:

Если функция удаления включена, когда CreateAppDir равно no, файлы данных удаления создаются в системном каталоге Windows.

Для решения проблемы:

  • Если вам нужен деинсталлятор, вы должны его где-нибудь сохранить. Если вашему установщику ни для чего не нужны права администратора (и, следовательно, вы не можете писать в системный каталог), вам нужно будет создать папку для файлов деинсталлятора. Поэтому не устанавливайте CreateAppDir на no. Вы можете использовать DefaultDirName, чтобы настроить папку установки для использования папки, в которой вам не нужны права администратора. Лучше всего использовать {autopf} константу .

    [Setup] 
    CreateAppDir=yes
    DefaultDirName={autopf}\My Program
    
  • Или вам действительно не нужен деинсталлятор. Затем установите Uninstallable на no.

    [Setup] 
    Uninstallable=no
    

    См. Также Используйте Inno Setup UI только как самораспаковывающийся - установка не требуется .

...