我有一个应用程序的Inno安装程序安装程序,用户可以选择“为所有用户安装”和“仅为我安装”。如果为所有用户安装,则将INI文件放在commonappdata中并共享设置(这是客户要求)。如果它是为当前用户安装的,则将其置于“本地设置应用程序数据”中。
一旦安装了应用程序,应用程序在运行时“了解”所使用的安装选项的最简洁方法是什么,从而应该从哪里读取并保存INI文件?此外,我希望'default'文件夹(用户在第一次尝试打开数据文件时放置的文件夹)是单用户安装的MyDocs,以及所有用户安装的SharedDocs,我假设解决方案也适用于此。
答案 0 :(得分:1)
如果选择“仅为我安装”,请让安装程序在HKCU下编写注册表值。在程序启动时查询密钥并相应地确定默认文件夹。
如果您正在使用任务让用户选择安装类型,则可以使用如下注册表项:
[Registry]
Root: HKCU; SubKey: SOFTWARE\MyCompany\MyProg; ValueType: dword; ValueName: InstallUserOnly; ValueData: 1; Tasks: install_just_for_me; Flags: UninsDeleteValue;
然后在应用程序启动时,您可以执行以下操作:
function GetSpecialFolderPath(Folder: Integer; CanCreate: Boolean): string;
begin
SetLength(Result, MAX_PATH + 1);
SHGetSpecialFolderPath(0, PChar(Result), FOLDER, CanCreate);
Result := PChar(Result);
end;
...
var
Reg: TRegistry;
DefFolder: string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\SOFTWARE\MyCompany\MyProg', False) then begin
if Reg.ValueExists('InstallUserOnly') then
DefFolder := GetSpecialFolderPath(CSIDL_PERSONAL, True)
else
DefFolder := GetSpecialFolderPath(CSIDL_COMMON_DOCUMENTS, True);
end;
finally
Reg.Free;
end;
如果您愿意,您当然也可以阅读注册表值。