2017-04-11 18 views
2

Inno Setupを使用してインストーラをビルドしています。[Files]セクションにC:\Users\Publicフォルダがハードコードされています。いくつかのファイルを置いてください(Inno Setupにはこのフォルダの定数はありません)Inno SetupはC: Users Publicの下にフォルダを作成しません。代わりにC: Users Public Public Documentsを実行します。

私の目標は、インストールにあるファイルがあるC:\Users\Public\MyAppフォルダを作成することです。私はインストールを実行する場合しかし、ここでフォルダを作成します C:\Users\Public\Public Documents\MyApp

は、インストーラがC:\Users\Public直下にフォルダを作成するアクセス権を持っていない、このAのアクセス許可の問題ですか?

[Files] 
Source: "MyApp\db.mdf"; DestDir: "{drive:{src}}\Users\Public\MyApp"; Flags: ignoreversion; 
+0

私はこれを再現できません。私の答えで提案をしてください。それが助けにならない場合は、私たちにログファイルを見せてください。 +これをテストしているWindowsのバージョンは何ですか? –

答えて

2

問題を再現できません。私にとってあなたのコードは機能します。私は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以降で動作します。

SHGetKnownFolderPathFOLDERID_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別名はありません。

+0

あなたは、天才です。私はしかし、そうではありません。私は非常に単純なInno Setupファイルをテストして作成しました。あなたは正しいです... C:\ Users \ Publicに正しくマップします。私のオリジナルのInnoファイルを見て、私は間違いを見つけました。 XP用に1つのコマンドを実行するCheckパラメータと、より新しいO/S用にもう1つのコマンドを実行するCheckパラメータがありました。さて、私はチェックコマンドを2つの間で切り替えるようにしていたので、私のWindows 10システム(C:\ Documents and Settings \ All Users \ Documentsに置こうとしている)にXPコードを呼び出していた。 – jrhoads23

+0

あなたのコメントは " C:\ Users \ Public "を望んでください...なぜその背後にある理由はありますか?あなたはmdbをC:\ Users \ Public \ Public Documentsフォルダの下に置くべきだと言っていますか? – jrhoads23

+0

ユーザーが閲覧できるドキュメントは、「C:\ Users \ Public \ Public Documents」に移動する必要があります。共有されたプライベートアプリケーションのデータは 'C:\ ProgramData'に移動する必要があります。あなたはファイルを' C:\ Users \ Public'に配備する必要があることを理解しました。 –

関連する問題