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: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 开始工作。
或者,您可以将SHGetKnownFolderPath
与FOLDERID_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