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

jrh*_*s23 4 inno-setup

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

我的目标是让安装程序创建一个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;
Run Code Online (Sandbox Code Playgroud)

Mar*_*ryl 5

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


虽然我不明白{drive:{src}}。如何在的驱动Users文件夹中涉及到安装的驱动?您应该使用{sd}常量

[Files]
Source: "MyApp\db.mdf"; DestDir: "{sd}\Users\Public\MyApp"; Flags: ignoreversion
Run Code Online (Sandbox Code Playgroud)

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

[Files]
Source: "MyApp\db.mdf"; DestDir: "{%PUBLIC}\MyApp"; Flags: ignoreversion
Run Code Online (Sandbox Code Playgroud)

从Windows Vista开始运行。

或者,您可以将SHGetKnownFolderPath搭配使用FOLDERID_Public。有关示例代码,请参见AppData \ LocalLow的常量?


如果甚至需要支持没有C:\Users\Public文件夹或PUBLIC变量的Windows XP,则必须找出需要在其中使用的路径(大概是C:\Documents and Settings\All Users),并使用脚本常量来实现后备:

[Files]
Source: "MyApp\db.mdf"; DestDir: "{sd}\Users\Public\MyApp"; Flags: ignoreversion
Run Code Online (Sandbox Code Playgroud)

对于其他人,值得注意的是,您的解决需求C:\Users\Public非常具体,与以下问题相关:当我不希望ProgramData中的C ++应用程序MDB复制到用户的AppData文件夹时

通常不希望使用C:\Users\Public,而是C:\Users\Public\Documents(= {commondocs})或C:\ProgramDataaka C:\Users\All Users(= {commonappdata})。