2009-10-10 9 views
5

設定を保存して、指定したマシンのアプリケーションのすべてのユーザーが使用できるようにする必要があります。 Vista/Win 7で動作する必要があり、アプリケーションは管理者として起動されません。Vistaのすべてのユーザーの設定を保存する方法

  • Program FilesフォルダをVista上で を保護されて としてプログラムディレクトリに保存することができません
  • 保護されています としてHKEY_LOCAL_MACHINEに保存することはできませんが、あまりにも
  • は、サーバーまたはに保存できませんWEB-サービス

どこにデータを保存できますか? 実行中にアプリケーションの権限が何らかの形で上昇したとしても、私の心配はVistaでレジストリが仮想化されていることです。実際には現在のユーザー専用のHKEY_LOCAL_MACHINEという特殊なものになります。私は

答えて

9

共通のアプリケーションデータに

System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

を.NETを使用してい

これにより、複数のユーザーおよびオペレーティング・システムの複数のバージョン間でデータを保存するために使用できるファイルシステムのパスです。バージョンによってパスが異なる場合がありますが、環境変数を使用しているため、上記の行は使用可能なパスに解決されます。

編集:
それだけで暗示されて以来、ノートとしてこれを追加したいです。このディレクトリに書き込むために昇格された権限を必要としません。まさしくこの目的のためです。

+0

Awsome!まさに私が探していたもの。ありがとう! –

8

Quintinが正しく返答したので、%ALLUSERSPROFILE%パス(.NETのEnvironment.SpecialFolder.CommonApplicationData)が探しているものです。そうするときに留意する

二つの重要なことは、しかし、:

  • をそれはあなたのアプリケーションのインストーラを使用して、あなたの会社やアプリケーション用のサブフォルダを作成することをお勧めします。例えば:すべてのユーザーが作成したフォルダへの読み取りアクセス権を持ってますが

    Dim DataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 
    DataPath = IO.Path.Combine(DataPath, "ACME Corp.") 
    DataPath = IO.Path.Combine(DataPath, "Widget App") 
    DataPath = IO.Path.Combine(DataPath, "1.0") '//Optional, but possibly handy to easily migrate configuration files across major app versions 
    
  • 、書き込みアクセスは、フォルダと同様に、Administratorsグループとローカルシステムのメンバーを作成したアカウントに制限され、デフォルトです。すべてのユーザーが共通の構成ファイル(1人のユーザーが作成したものの、管理者以外の他のユーザーが作成したもの)を変更できる場合は、このアクセスを明示的に行う必要があります。ここでも、これが最良のあなたのアプリのインストーラから行われているが、あなたのアプリが最初に実行されると、たとえば、同様のコードから行うことができます。ここでは

    Dim di As New IO.DirectoryInfo(DataPath) 
    Dim ds = di.GetAccessControl 
    ds.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(...)) 
    di.SetAccessControl(ds) 
    
+0

ありがとう、これは確かに私を捕まえたでしょう! –

-1

は、すべての設定を保持することができます回避策ですユーザー:

  1. アプリケーションによって読み取られるプログラムファイルに設定ファイルを置きます。
  2. この設定ファイルを変更するには、設定ファイルに書き込むように設計された新しいアプリケーションを作成します。
  3. 打ち上げ「として実行する」に設定動詞であなたのメインアプリからアプリを修正し、この設定

    Process p = new Process(); 
    p.StartInfo = new ProcessStartInfo("changeXMLSettings.exe"); 
    p.StartInfo.Verb = "runas"; 
    p.Start(); 
    

これは、昇格のプロンプトを表示し、プログラムファイルへの書き込みをアプリに許可を変更する設定を行いますディレクトリ。

+0

約4年前に投稿された、これに対して完全に優れた(より正確な)ソリューションがあることを考慮すると、なぜこの回避策を使用したいと思いますか? –

関連する問題