3

我有一个应用程序的 Inno Setup 安装程序,它为用户提供“为所有用户安装”和“仅为我安装”之间的选择。如果为所有用户安装,INI 文件放在 commonappdata 中并共享设置(这是客户要求)。如果是为当前用户安装的,则放在本地设置appdata中。

安装应用程序后,应用程序在运行时“知道”使用的安装选项是什么以及应该从哪里读取和保存 INI 文件的最简洁方法是什么?另外,我希望“默认”文件夹(用户第一次尝试打开数据文件时放置的文件夹)是 MyDocs 用于单用户安装,而 SharedDocs 用于所有用户安装,我假设该解决方案也适用于此。

4

1 回答 1

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;

如果您愿意,当然也可以读取注册表值。

于 2011-04-20T20:50:18.607 回答