2009-11-27 7 views
5

私はXP上で動作するアプリ(32ビットC++)をWindows 7とVistaで動作させる必要があります。ユーザーから独立した何十バイトものデータを格納する必要があります。 XPでは、HKEY_LOCAL_MACHINE \ Softwareのレジストリにデータを保存しました。 Windows 7でアプリケーションを実行すると、レジストリエントリが仮想化され、各ユーザーが別々のデータコピーを取得します。windows 7 - マシンのユーザーに依存しないデータはどこに保存できますか?

仮想化されていないレジストリは、データの論理的な場所のようですが、どうやってそのようにするかわかりません。私はそこに実際にデータを格納する多数のアプリケーションがあることに気付きます。彼らはどうやってそうするのですか?

私はまた、他の場所にデータを保存したいと思います。そこには、グローバルリポジトリがありますか?単一の小さなファイルが私が必要とするものです。

私は多かれ少なかれ、権利/特権ビジネス全体を知らないので、ヒントやポインタなどは大いに感謝しています。

+0

これらのデータについての詳細は教えてください。それはインストール中に一度書き込まれ、後で変更されることはありませんか?アプリケーションが実行されるたびに変更できますか? – reuben

+0

@Reuben:現在のところ、最初は最初の実行時に作成され、おそらくほんの数回更新されることはほとんどありません。インストール時に初期化することはできますが、後で更新する必要があります。 –

+0

なぜユーザーから独立している必要がありますか?なぜ自分のコピーを持っている各ユーザーが悪いのですか? –

答えて

2

Windows 7の設計目標の1つは、ユーザーデータとアプリケーションを分離することです。これはプライバシー、セキュリティ、およびカスタマイズを改善するためです。実際、Win 7の標準ユーザーは他のユーザーのデータを変更することはできません。

アプリケーションデータを格納する標準の場所は、System.Environment.SpecialFolder列挙によって返されます。すべてのフォルダがすべてのユーザーによって読み取り可能または書き込み可能であるわけではないことに注意してください。たとえば、CommonApplicationDataはすべてのユーザーが読むことができますが、Adminsなどの適切なポリシーを持つユーザーだけが書き込み可能です。

ユーザー間で共有されるデータが絶対に必要な場合は、管理者または権限を持つユーザーが共有場所にデータをインストールする必要があります。このデータを更新する必要がある場合は、ApplicationDataなどの書き込み可能な場所にコピーして、自分のプライベートコピーを更新する必要があります。このプライベートコピーは、他のユーザーが変更することはできません。アプリケーションが別の方法で動作しない限り、共有場所にデータをインストールしないでください。

実際、Win7では、共有された場所ではなく、ログオンしているユーザーのアプリケーションとデータフォルダにすべてのアプリケーションとデータをインストールする必要があります。複数のユーザーがアプリケーションをインストールすると、各ユーザーはアプリケーションとデータの独自のコピーを取得します。これはほとんど常にあなたが望むものです。複数のユーザーがアプリケーションやゲームを実行している場合、1人のユーザーが他のユーザーを変更しないようにします。複数のユーザーが実際に同じ変更が必要な場合は、必要に応じて各ユーザーにプライベートコピーを更新させてください。 1人のユーザーのアカウントがハッキングされたり悪化したりすると、ほかのユーザーのアプリケーションやデータが破壊されることはありません。

Win7では、ユーザーはリモートからマシンにログオンできるので、画面解像度やIPアドレスなどのマシン固有のデータをユーザーが格納することはお勧めできません。代わりに、アプリが実行されるたびにこれをチェックしてください。

+1

実際には、書き込み可能な共有データが必要な場合のVista認証ガイドの推奨アプローチは、アプリケーションインストーラがCommonApplicationDataの下にフォルダを作成し、それに応じて権限を設定することです。 –

+0

...言い換えれば、共有される書き込み可能なデータなどの禁止がないということです。意図的に行うのは簡単ではありませんが、不可能ではなく、有効なユースケースがあります。 –

+0

良いコメントパベル;それは不可能ではありませんが、私はあなたがこれを行うべきではないという提案に立っています。 –

0

IMHO、多くの人が個々のユーザーにソフトウェアパッケージの独自のコピーをインストールさせると思うのは無理です。実際、多くのパッケージはADMIN(ALLUSERS = 1)で実行されない限りインストールされません。 ADMIN未満の保護レベルでシステム全体のインストールを容易にするための妥当な手段が提供されていない場合、ADMINレベルのインストールは通常のままです。

たとえば、レジ​​ストリ(HKLM \ SOFTWARE \ package)の一部の制限された部分とすべてのUSERS \ APPLICATION DATAのディレクトリにレジストリキーを作成できないADMIN以外のユーザー(中間の権限を持つ) \パッケージ?

私はADMIN必須(ALLUSERS = 1).msiを作成し、保護が変更されたレジストリキーを作成することに決めました。

0

私の顧客が専用のワークステーションを持っているという状況では、私たちのメッセージはITスタッフにメッセージを伝えるために必要です同じマシンにそれをすべてのユーザー用にインストールしますか? Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)+ @ "\ GoScan \ GoScan.ini"

が、他の同様に見出した:

は、我々は(Windows 7の/ Vistaの下)への読み取り/書き込みする必要があります一般的なユーザーのアクセス権はr + wには不十分です。インストーラが完了した後、またはインストール中にディレクトリ/ファイルのアクセス権を変更することは、「容認できる」プラクティスですか(VS 2008セットアッププロジェクトでこれを行う場所がわからない場合)。

-Paul

関連する問題