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

Posted

技术标签:

【中文标题】Inno Setup 不会在 C:\\Users\\Public 下创建文件夹 - 而是会做 C:\\Users\\Public\\Public Documents【英文标题】:Inno Setup will not create folder under C:\Users\Public - will instead do C:\Users\Public\Public DocumentsInno Setup 不会在 C:\Users\Public 下创建文件夹 - 而是会做 C:\Users\Public\Public Documents 【发布时间】:2017-04-11 19:03:46 【问题描述】:

我正在使用 Inno Setup 来构建我的安装程序,我在 [Files] 部分硬编码了 C:\Users\Public 文件夹来放置一些文件(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;

【问题讨论】:

我无法重现此内容。在我的回答中尝试建议。如果没有帮助,请向我们展示一个日志文件。 + 您在哪个版本的 Windows 上进行测试? 【参考方案1】:

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


虽然我不明白drive:srcUsers 文件夹的驱动器与安装程序的驱动器有什么关系?你应该使用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,你必须找出你需要在那里使用的路径(可能是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:\Users\Public 的需求非常具体,与以下问题相关:C++ app MDB in ProgramData copies to user's AppData folder when I dont want it to。

通常不需要C:\Users\Public,而是C:\Users\Public\Documents(=commondocs)或C:\ProgramData又名C:\Users\All Users(=commonappdata)。

【讨论】:

您先生,真是个天才。然而我不是。我制作了一个非常简单的 Inno Setup 文件进行测试,你是对的……它正确映射到 C:\Users\Public。查看我原来的 Inno 文件,我发现了我的错误。我有一个 Check 参数,它将为 XP 运行一个命令,为更新的 O/S 运行另一个命令。好吧,我让 Check 命令在两者之间切换,所以它在我的 Windows 10 系统上调用我的 XP 代码(试图把它放在 C:\Documents and Settings\All Users\Documents ) 至于您的评论“人们通常不想要 C:\Users\Public”......为什么这背后的原因是?你是说我应该把我的 mdb 放在 C:\Users\Public\Public Documents 文件夹下吗? 共享的用户可见文档应该转到C:\Users\Public\Public Documents。共享的私有应用程序数据应该转到C:\ProgramData - 我知道您必须将文件部署到C:\Users\Public,因为您无法控制位置。

以上是关于Inno Setup 不会在 C:\Users\Public 下创建文件夹 - 而是会做 C:\Users\Public\Public Documents的主要内容,如果未能解决你的问题,请参考以下文章

inno setup 在卸载时如果想保留文件 使用uninsneveruninstall

Inno Setup - 正确定时更新进度条

Inno Setup区段之Tasks篇

Inno setup 默认安装路径的问题

我在用inno setup打包的程序,在安装过程中会先解压,当解压完成后滚动条就满了

inno setup 在win7下的开始菜单和桌面快捷方式问题