Inno Setup-在Windows 10的公共用户文档中创建文件夹

时间:2019-03-07 23:09:59

标签: windows installation installer inno-setup pascalscript

我正在尝试向安装中添加文件夹,该文件夹最终将保存用户输出数据。我无法将文件夹放入“程序文件”中,因为用户将不具有写入该文件夹所需的权限。

如果未将其安装到Program Files,则可以在应用程序文件夹中创建数据文件夹(工作正常)。

我有一些代码来检测是否已对Program Files进行安装,如果要安装,我想使用CreateDir()C:\Users\Public\Documents\{'MyAppName}\DB中创建数据文件夹,这似乎失败了,即使标准的Inno Setup脚本也可以在[Code]中使用

[Dirs]
Name: "{commondocs}\{#MyAppName}\DB"

一旦路径确定,我将使用DeinitialiseSetup()过程在安装结束时进行此操作。

这是我的代码:

[Code]
  procedure DeinitializeSetup();
  begin
    { If it has been installed in the Program Files Folder put DB in Public Documents }
    if Pos(ExpandConstant('{pf}'),ExpandConstant('{app}')) > 0 then                       
    begin
      if not CreateDir (ExpandConstant('{commondocs}\{#MyAppName}\DB')) then
        MsgBox('Error: Data folder could not be created.', mbInformation, MB_OK);
    end
      else
    begin
      if not CreateDir (ExpandConstant('{app}\DB')) then
        MsgBox('Error: Data folder could not be created.', mbCriticalError, MB_OK);
     end;
  end;

遵循我使用的另一个SO建议:

PrivilegesRequired=lowest

在脚本中,但无论有没有此功能都无法使用。我开始认为这可能是权限问题,但不确定为什么,因为安装程序标准[Dirs]脚本可以正常工作。

这与有关标识路径的其他问题不同-我只有我想要的所有路径:[Code] CreateDir()似乎无法在{commondocs}中创建文件夹。

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我的猜测是{commondocs}\{#MyAppName}不存在。 CreateDir function只能创建一个目录。如果它们不存在,它将不会为您创建父文件夹(与[Dirs]部分条目相反)。

您可以改用ForceDirectories function

  

一次创建沿指定目录路径的所有目录。


旁注:不要使用DeinitializeSetup创建目录–即使安装失败或用户取消安装,也会触发Is。

使用CurStepChanged(ssPostInstall)

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    { Your code }
  end;
end;