0
我想要在.INI文件中安裝時存儲用戶所做的所有選擇(或默認值,如果用戶沒有更改它們)。我知道命令行選項/ LOADINF和/ SAVEINF,但我希望具有類似的功能,而不依賴於命令行。這將用於在重新安裝的情況下保留設置,還可以定義一組設置(由管理員定義),用於分散辦公室的多個安裝。Inno-setup:將所有用戶的選擇存儲在一個INI文件中
感謝您的幫助
我想要在.INI文件中安裝時存儲用戶所做的所有選擇(或默認值,如果用戶沒有更改它們)。我知道命令行選項/ LOADINF和/ SAVEINF,但我希望具有類似的功能,而不依賴於命令行。這將用於在重新安裝的情況下保留設置,還可以定義一組設置(由管理員定義),用於分散辦公室的多個安裝。Inno-setup:將所有用戶的選擇存儲在一個INI文件中
感謝您的幫助
有可能做你正在尋找的東西。不過,您需要在[code]部分中使用相當數量的代碼。我在幾年前做過類似的事情,但我只是在閱讀INI。我從來沒有寫過INI文件。你應該可以使用SetIni *(SetIniString,SetIniBool等)函數寫入它。您可以使用GetIni *函數讀取INI文件。這裏有一個快速示例,我扔在一起,給出了一個想法:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.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={{4CCA332F-C69B-48DF-93B4-145EB88A1BCB}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={code:GetDefaultDir}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\util\innosetup\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent
[Code]
var
FinishedInstall : boolean;
function GetDefaultDir(def: string): string;
var
sInstallPath : string;
bRes : boolean;
begin
sInstallPath := GetIniString('Common', 'TargetDir', ExpandConstant('{pf}') + '\myApp', ExpandConstant('{src}') + '\myappsetup.INI');
Result := sInstallPath;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
FinishedInstall := True;
end;
procedure DeinitializeSetup();
var
bIni : boolean;
begin
if FinishedInstall then
bIni := SetIniString('Common', 'TargetDir',ExpandConstant('{app}'), ExpandConstant('{app}') + '\myappsetup.INI');
end;
謝謝Mirtheil,我從中得到了一些好主意。但是,爲了使用它,我需要確切地知道哪些事件過程會讓我在實際安裝開始之前訪問用戶選擇。另外,如何訪問標準對話框上的用戶選項(如應用程序目錄或組)。 – LittleFish 2012-01-06 08:50:58
我上面給出的示例將設置應用程序目錄。您可以通過爲設置常量{groupname}的「DefaultGroupName」執行類似的代碼,將其應用於程序組。大多數標準對話框以各種常量存儲信息。 – mirtheil 2012-01-06 12:26:48