我正在尝试向安装中添加文件夹,该文件夹最终将保存用户输出数据。我无法将文件夹放入“程序文件”中,因为用户将不具有写入该文件夹所需的权限。
如果未将其安装到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}
中创建文件夹。
非常感谢您的任何建议。
答案 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;