Использование DIR-переключателя с командной строкой Inno Setup - PullRequest
1 голос
/ 31 мая 2019

Скрипт

Я создал этот простой скрипт:

[ISPP]
; SignTool parameters
#define SignedDesc "$qxxx$q"
#define SignedPfx "$qxxx$q"
#define SignedTimeStamp "$qhttp://timestamp.verisign.com/scripts/timestamp.dll$q"
#define SignedPw "$qxxx$q"

#define AppURL "http://www.publictalksoftware.co.uk"
#define AppPublisher "Andrew Truckle"

[Setup]
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True
UsePreviousSetupType=False
UsePreviousTasks=False
UsePreviousLanguage=False
FlatComponentsList=False
AlwaysShowComponentsList=False
ShowComponentSizes=False
AppName=Public Talks Help Documentation
AppVersion=19.0.0
CreateAppDir=False
Uninstallable=no
OutputBaseFilename=PublicTalksHelpDocumentationSetup
SourceDir=D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM
SignTool=SignTool /d {#SignedDesc} /du $q{#AppURL}$q /f {#SignedPfx} /p {#SignedPw} /t {#SignedTimeStamp} /v $f
AppId={{xxx}

[Files]
Source: "CommunityTalks.chm"; DestDir: "{app}"; Flags: ignoreversion

Как видите, он очень прост.Он предназначен для выполнения моим основным приложением.


Тестирование

Я решил попробовать и подражать тому, что будет делать мое приложение, протестировав пакетный файл.Вот команда командного файла:

PublicTalksHelpDocumentationSetup /SP- /VERYSILENT /DIR="C:\Program Files (x86)\Public Talks" /LOG=".\TestInstallLog.txt"

Результаты

На поверхности я думал, что это сработало.Я не увидел ничего на экране, кроме вопроса о разрешении на запуск приложения.Но я не смог найти файл в указанной папке DIR.

Итак, я еще раз взглянул на журнал:

2019-05-31 21:32:02.971   Log opened. (Time zone: UTC+01:00)
2019-05-31 21:32:02.971   Setup version: Inno Setup version 6.0.2 (u)
2019-05-31 21:32:02.971   Original Setup EXE: D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe
2019-05-31 21:32:02.971   Setup command line: /SL5="$15002A,25665310,721408,D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe" /SPAWNWND=$30900 /NOTIFYWND=$30914 /SP- /VERYSILENT /DIR="C:\Program Files (x86)\Public Talks" /LOG=".\TestInstallLog.txt"
2019-05-31 21:32:02.971   Windows version: 10.0.17763  (NT platform: Yes)
2019-05-31 21:32:02.972   64-bit Windows: Yes
2019-05-31 21:32:02.972   Processor architecture: x64
2019-05-31 21:32:02.972   User privileges: Administrative
2019-05-31 21:32:02.973   Administrative install mode: Yes
2019-05-31 21:32:02.973   Install mode root key: HKEY_LOCAL_MACHINE
2019-05-31 21:32:02.973   64-bit install mode: No
2019-05-31 21:32:02.979   Created temporary directory: C:\Users\ajtru\AppData\Local\Temp\is-1NT54.tmp
2019-05-31 21:32:03.227   Calling RestartManager's RmGetList.
2019-05-31 21:32:03.350   RmGetList finished successfully.
2019-05-31 21:32:03.350   RestartManager found no applications using one of our files.
2019-05-31 21:32:03.356   Starting the installation process.
2019-05-31 21:32:03.360   -- File entry --
2019-05-31 21:32:03.360   Dest filename: C:\WINDOWS\CommunityTalks.chm
2019-05-31 21:32:03.364   Time stamp of our file: 2019-05-30 18:35:24.000
2019-05-31 21:32:03.364   Installing the file.
2019-05-31 21:32:03.539   Successfully installed the file.
2019-05-31 21:32:03.539   Installation process succeeded.
2019-05-31 21:32:03.539   Need to restart Windows? No
2019-05-31 21:32:03.541   Deinitializing Setup.
2019-05-31 21:32:03.557   Log closed.

Замечание?Почему он установил его в папку Windows ?

2019-05-31 21:32:03.360 Dest filename: C:\WINDOWS\CommunityTalks.chm

Как указать папку, в которую я действительно хочу установить файлзатем?

Обновление

Я нашел похожий вопрос об использовании пользовательских параметров.Поэтому я изменил его на:

Source: "CommunityTalks.chm"; DestDir: "{param:InstallPath}"; Flags: ignoreversion

И я изменил командную строку с использования DIR на InstallPath, но ИМХО DIR должно быть достаточно.


Альтернатива

Полагаю, я мог бы использовать этот скрипт на Паскале и, возможно, использовать его?Тогда мне не нужно передавать папку:

// Returns the path where the program was last installed
function GetPathInstalled( AppID: String ): String;
var
    sPrevPath: String;
begin
    sPrevPath := '';
    if not RegQueryStringValue( HKLM,
        'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppID+'_is1',
        'Inno Setup: App Path', sPrevpath) then
        RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppID+'_is1' ,
                            'Inno Setup: App Path', sPrevpath);

    Result := sPrevPath;
end;

Так как я знаю идентификатор приложения.Выгода от передачи его будет обслуживать, если они перенесли программу или что-то.Но мой вопрос все еще стоит о неудаче DIR.

1 Ответ

1 голос
/ 03 июня 2019

Цитирование CreateAppDir документация :

Если для этого параметра установлено значение no, каталог для приложения не будет создан, страница мастера выбора места назначения не будет отображаться, а константа каталога {app} эквивалентна в директорию {win} константы .

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