問題を再現できません。私にとってあなたのコードは機能します。私は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
を使用することもできます。あなたが存在してもWindows XPをサポートする必要がある場合のコード例では、Constant for AppData\LocalLow?
を参照してくださいC:\Users\Public
フォルダまたはPUBLIC
変数は、あなたが、あなたの必要性はなく、そこに使用するためにどのようなパス(おそらく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
のためのあなたの必要性は、このquestiに関連した、非常に特異的であることは注目に値しますオン: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
({commonappdata}
=)C:\Users\All Users
別名はありません。
私はこれを再現できません。私の答えで提案をしてください。それが助けにならない場合は、私たちにログファイルを見せてください。 +これをテストしているWindowsのバージョンは何ですか? –