2

アプリケーションをインストールするインストーラー(Nullsoft Install System v2.46)と、インストールされたアプリケーションから読み取り/書き込みアクセスされる(テキスト)データファイルを含むいくつかの(ネストされた)データディレクトリを作成しました

WinXPではすべて正常に動作します。アプリケーションがロードされ、インストールディレクトリの下にネストされたデータディレクトリからファイルの読み取り/書き込みが可能になります。

ただし、Win7 / 64にインストールすると、インストールの一部として作成されたデータディレクトリは読み取り専用になります。したがって、アプリケーションはデータファイルをロードしますが、上書きに失敗します(インストールディレクトリの下の読み取り専用データディレクトリにあるため)。

はい、これはWin7-64ビットであるため、データディレクトリはたまたま次の場所にあります。

  C:\Program Files (x86)\MyApp\MyDataDir0

Win7のインストールポリシーは、以前のWinOSよりも厳格であることを理解しています(セキュリティ上の理由から)。

質問:インストール中に、これらのデータディレクトリが読み取り/書き込み可能であり、その中の(テキスト)データファイルも読み取り/書き込み可能であることを確認するには、どのメカニズムを使用する必要がありますか?

これらのデータファイルはユーザー固有ではなく、プログラムの実行に必要なデータを意味します。(これらがないと、プログラムは役に立ちません。)論理的には、これらは「プログラムシステム」ファイルですが、プログラムで使用される「拡張可能なデータセット」を表すと合理化できます(したがって、読み取り/書き込みが必要です)。

単純さと一貫性のために、プログラム内からdir / file権限を変更するのではなく、インストーラーでこれに対処したいと思います。このデータは、アプリケーションがインストールされている場所に存在し、一部には存在しないことが望ましいですC:/Users/Default/。またはC:/ProgramData/MyApp/.ディレクトリ。

Win7ポリシーに対するdata-dirs-under-app-install-dirに対する「読み取り/書き込み」の関心はありますか?(そこにインストールしないことになっていますか?)

4

2 に答える 2

2

%ProgramFiles% への書き込みに依存している場合、プログラムは WinNT のすべてのバージョンで基本的に壊れています。非管理者としてのテストに失敗しただけです!

すべてのユーザーにファイルまたはフォルダーへの書き込みアクセスを許可する場合は、アクセス制御プラグインを使用します。これを行うと、セキュリティが少し失われます。リスクを軽減するには、データ ファイルがサブ ディレクトリ (%ProgramFiles%\MyApp\Dataまたはそのようなもの) に格納されていることを確認し、通常のユーザーに .exe または .dll のフォルダーへの書き込みアクセスを許可しないでください。

実際にすべきことは、プログラムを最初に実行するときに %ProgramFiles% から %AppData% にファイルをコピーすることです。これにより、各ユーザーが独自の設定を取得し、セキュリティの問題がなくなります。

于 2011-07-16T00:30:14.417 に答える
1

実際、アプリケーションは、ユーザーが管理者ではない Windows XP では動作しません。Windows 7/Vista の Program Files ディレクトリの既定のアクセス許可は、Windows XP と同じです。

あなたの説明から、これらのファイルは Program Files ではなく Program Data ファイルであるため、ProgramDataディレクトリに保存することをお勧めします。その場所を取得するには、SHGetFolderPath関数をCSIDL_COMMON_APPDATAパラメーターとして呼び出します。ただし、この場合でも、アプリ フォルダーのアクセス許可を編集して、すべてのユーザーによる書き込みを許可する必要がある場合があります。

それでも Program Files にファイルを保存したい場合は、インストール中にデータ フォルダのアクセス許可を編集するしかありません。

于 2011-07-15T17:59:07.873 に答える