我正在使用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)
我无法重现您的问题。对我来说,您的代码有效。我已经在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})。
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |