Inno安装程序不会在C:\ Users \ Public下创建文件夹 - 而是执行C:\ Users \ Public \ Public Documents

时间:2017-04-11 19:03:47

标签: inno-setup

我正在使用Inno安装程序来构建我的安装程序,我在C:\Users\Public部分中对[Files]文件夹进行了硬编码以放置一些文件(Inno安装程序没有此文件夹的常量)

我的目标是让安装创建一个包含一些文件的C:\Users\Public\MyApp文件夹。但是当我运行安装时,它在这里创建文件夹: C:\Users\Public\Public Documents\MyApp

这是权限问题,安装程序无权直接在C:\Users\Public下创建文件夹吗?

[Files]
Source: "MyApp\db.mdf"; DestDir: "{drive:{src}}\Users\Public\MyApp"; Flags: ignoreversion;

1 个答案:

答案 0 :(得分:5)

我无法重现你的问题。对我来说,你的代码有效。我已在Windows Vista,7和10上对其进行了测试。它始终安装到C:\Users\Public\MyApp

虽然我不理解{drive:{src}}Users文件夹的驱动器如何与安装程序的驱动器相关联?您应该使用{sd} constant

[Files]
Source: "MyApp\db.mdf"; DestDir: "{sd}\Users\Public\MyApp"; Flags: ignoreversion

但无论如何,要解析C:\Users\Public的路径,您可以使用PUBLIC环境变量:

[Files]
Source: "MyApp\db.mdf"; DestDir: "{%PUBLIC}\MyApp"; Flags: ignoreversion

自Windows Vista以来一直有效。

或者,您可以将SHGetKnownFolderPathFOLDERID_Public一起使用。有关示例代码,请参阅Constant for AppData\LocalLow?

如果你甚至需要支持没有C:\Users\Public文件夹或PUBLIC变量的Windows XP,你必须找出你需要在那里使用的路径(可能是{{1} }),并使用脚本常量实现回退:

C:\Documents and Settings\All Users

对于其他人而言,值得注意的是,您对解决问题的需求[Files] Source: "MyProg.exe"; DestDir: "{code:GetPublicPath}\MyApp"; Flags: ignoreversion [Code] function GetPublicPath(Param: string): string; begin Result := GetEnv('PUBLIC'); if Result <> '' then begin Log(Format('PUBLIC is "%s"', [Result])); end else begin Result := GetEnv('ALLUSERSPROFILE'); Log(Format('PUBLIC is not set, ALLUSERSPROFILE is "%s"', [Result])); end; end; 非常具体,与此问题相关:C++ app MDB in ProgramData copies to user's AppData folder when I dont want it to

通常不希望C:\Users\Public,但C:\Users\Public(= {commondocs})或C:\Users\Public\Documents又名C:\ProgramData(= {commonappdata})。