問題タブ [appdata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - IsolatedStorage と AppData ファイル ストレージのどちらを選ぶべきですか?
私は最近IsolatedStorage
.net の機能を発見しました。アプリケーション データに対していつそれらを使用するべきなのか (eg) をいつ使用すべきなのか疑問に思っていますApplication.LocalUserAppDataPath
。
私が気づいたことの 1 つApplication
は、winforms アプリの外には存在しないことです。そのためIsolatedStorage
、特定のストレージを必要とするクラス ライブラリ、特にそのライブラリが Web アプリとwinforms アプリ。それが唯一の差別化ポイントですか、それとも他にもありますか?
(原則として、今まで、ライブラリが何らかの外部ストレージを必要とする可能性がある場合に、アプリがライブラリにファイル ストリームを提供するようにしました。一般的に、ライブラリが呼び出し元のコンテキストの外部にあるある種の状態。)
c# - 現在のユーザーの「Application Data」フォルダのパスを取得するにはどうすればよいですか?
1) ユーザーが作業している Windows インストール ドライブを確認するにはどうすればよいですか? DocumentsandSettingsのApplicationDataに移動するには、これが必要です。
2) また、ApplicaitionData に移動できるように、ユーザー名も取得するにはどうすればよいですか? 例: 「D:\Documents and Settings\user\Application Data」。
registry - 特定のユーザーの SHGetFolderPath()
特定のユーザーのローカル アプリケーション データ フォルダーを取得する良い方法を探しています。そのユーザーのログインの詳細を入力する必要はありません。
SHGetFolderPath()は、ローカル appdata フォルダーを取得するユーザーのアクセス トークンを受け入れることができますが、アクセス トークンを取得するには、ユーザーのパスワードを提供する必要があります。また、ドキュメントによると、これは <= Windows 2000 ではサポートされていません。
レジストリ キーHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell フォルダーには、現在のユーザーのローカル appdata フォルダーの場所を含む AppData 値が含まれています...したがって、特定のユーザーの HKCU ハイブを技術的にマウントできます。この値にアクセスします。ただし、Microsoft はこのキーの使用を強く推奨していないようで、不正確な場合もあると聞いています。
皮肉なことに、Windows では、Explorer を開いて正しい場所を参照するだけで、管理者アカウントは任意のユーザーの appdata フォルダー内のすべてのデータに簡単にアクセスして変更できますが、簡単な方法はないようです。特定のユーザーの appdata フォルダーの場所をプログラムで取得します。
他に選択肢はありますか?現時点では、レジストリへのアクセス (gasp) が最良の選択肢のように思えますが、可能であれば、Microsoft によって推奨されていない公式のものを使用したいと考えています。
任意の提案をいただければ幸いです。
permissions - 管理者が自分のプログラム内からユーザーの設定を変更できるようにする -- 最適なオプションは?
管理者がアプリを使いやすくすることに取り組んできました。私が本当にやりたいことの 1 つは、管理者がプログラム内から他のユーザーの設定を変更できるようにすることです。ただし、通常の古いユーザーが自分の設定を変更できるようにしながら、私のアプリケーションは必ずしも専用ではないためです。ユーザーに特定の設定を強制的に使用させたい管理者。
これを行うには、次の 2 つの方法が考えられます。
1)ユーザー設定ファイルのパスを現在の場所 (CLSID_APPDATA、通常はDocuments and Settings\ Username ) から、誰でもアクセスできるパス (CLSID_COMMON_APPDATA、通常はDocuments and Settings\All Users ) に移動します。次に、各ユーザーの設定をユーザー固有のファイル (おそらくユーザーのテキスト SID と同じ名前) に保存します。フォルダーは
C:\Documents and Settings\All Users\My Company\My Programのようになります。 \settings\123-abc-456-def.settings
C:\Documents and Settings\All Users\My Company\My Program\settings\234-bcd-477-xyz.settings
C:\Documents and Settings\All Users\My Company\My Program\settings\946-hdc-743-ddd.settings 利点
:短所:
- COMMON_APPDATA パスはすべてのユーザーで同じであるため、これにより、管理者は任意のユーザーの設定を表示して直接変更できます。これは私が本当に望んでいる方法です-これは最も簡単です-しかし、大きな欠点があります:
2)設定ファイルのパスをグローバルにアクセス可能なパスに移動し、ユーザーの設定ファイルを直接変更する代わりに、アプリで「上書き」ファイルを作成してアプリの CLSID_COMMON_APPDATA フォルダーに保存し、管理者がユーザーの設定を上書きできるようにします。
- 権限が問題になる可能性があります。通常のユーザーが設定を保存できるようにするには、プログラムの COMMON_APPDATA 設定フォルダーへの書き込みアクセスをユーザーに許可する必要があります。
もちろん、設定が保存され、設定ファイルがディスク上に作成された場合、ユーザーの設定ファイルへの書き込みアクセスを、設定が対象のユーザーと管理者に制限して、他の制限されたユーザーがアクセスできないようにする必要があります。それらを変更します。
ただし、ユーザーがプログラム内から独自の設定を書き込む機会を得る前に、知識のある悪意のある限定ユーザーが、ユーザーの知らないうちにその特定のユーザー用の設定ファイルを作成する可能性があります。制限付きユーザーがファイルを作成した場合、それは彼らがファイルを所有していることを意味します...そして、管理者がファイルのアクセス許可を変更しない限り、そのユーザー (設定の対象者) は設定を変更できなくなります。
ありえない状況かもしれませんが、それでも心配です。
私のアプリがそのユーザー (設定が「上書き」された) に対して読み込まれると、このファイルが検出され、CLSID_APPDATA ( Documents and Settings\ Username ) にある通常の設定ファイルの代わりに読み込まれます。
長所:短所:
- アクセス許可は簡単に処理できます。
デフォルトでは、Documents and Settings\ Username APPDATA フォルダーの場合、管理者とUsernameのみが内部からファイルにアクセスできます。そのため、それ自体で、ユーザー自身の通常の個人設定を他の制限されたユーザーから保護します。
「上書き」設定を保護するために、私のアプリは、上書きファイルが書き込まれる COMMON_APPDATA フォルダーへの書き込みアクセスを管理者以外のすべてに拒否するだけで済みます。これらのオーバーライド設定は、管理者のみが変更できます。
- この方法は明らかに回り道です。ユーザーが自分の通常の個人設定を変更した場合、管理者はそれらの変更を確認できません。管理者は、ユーザーの通常の設定をオーバーライドしている設定のみを確認できます (代わりにユーザーに強制的に使用させることができます)。
ある意味これでいいのかもしれませんが… 遠回りというのはちょっと気が引けますね。
皆さんがこれについてどう思うか興味があります。私の最良の選択肢はどれですか?私は個人的には 2 番の方に傾いています。なぜなら、2 番の方が簡単ではありませんが、安全性が高く、管理者が混乱するような回りくどくないからです。
ただし、提案も受け付けています。より効果的だと思われる優れたオプションはありますか?
2009 年 7 月 6 日編集:オプション #2 の場合、管理者はすべてのユーザーの設定を単一の上書きファイルで上書きできるだけでなく、個々のユーザーの設定をそのユーザー固有の上書きファイルで上書きすることもできることに注意してください (オプション#1、そのファイル名は、設定が上書きされているユーザーのSIDの名前である可能性があります)。元の投稿でそれが完全に明確であったかどうかはわかりません。
c# - C#で特定のユーザーのAppDataディレクトリを取得するには?
C# でプログラムを実行しているユーザーではない特定のユーザーのアプリケーション データ ディレクトリを取得することは可能ですか?
visual-studio - Visual Studio で App_Data フォルダーを追加するにはどうすればよいですか?
これはばかげた質問ですが、App_Data フォルダーをプロジェクトに追加するにはどうすればよいですか? プロジェクトに含めたい xsd ファイルがあります。
c# - ASP.NET WebアプリケーションのApp_DataフォルダーにあるSqliteデータベースファイルを参照するにはどうすればよいですか?
現在、ASP.NETのベストパターンとプラクティスに従って、sqlitedbファイルをApp_Dataフォルダーに保存しています。
現在、webconfigで次のものを使用しています。
および以下のコード:
これにより、sqliteは(テーブルを含まない)新しいデータベースを作成します。したがって、テーブル名が見つからないため、データアクセス呼び出しは機能しません。WebApplicationコードからApp_Dataフォルダー内のsqlitedbファイルを参照するにはどうすればよいですか?
ありがとう!
windows - Microsoft には、さまざまな Windows プラットフォームでのアプリ データとユーザー データの保存に関するベスト プラクティス ドキュメントがありますか?
多くのバージョンの Windows を対象とするアプリケーションを作成する場合、アプリケーション固有のデータを格納する場所を決定するためのベスト プラクティスは何ですか。具体的には:
- アプリケーション固有のデータ (アプリ構成データなど)
- ユーザー固有のデータ/設定
たとえば、Windows Vista では %APPDATA% などの環境変数を使用できることはわかっていますが、Windows 7、Windows XP、Windows 98 についてはどうでしょうか。
私の主な質問は、Microsoft がこれに関するベスト プラクティス ドキュメントを持っているかどうかです。さまざまな種類のデータ (アプリとユーザー) のファイル システムの場所と、これらの場所への読み取り/書き込み時に留意する必要があるセキュリティへの影響を概説しています。 ?
また、これが .NET アプリケーション (ApplicationSettingsBase を利用できる) だけでなく、アンマネージ C/C++ アプリケーションにもどのように関係するかに興味があります。
Pax と Remus の素晴らしい回答に感謝します。このアイテムも見つけました(XPに固有):
Visual C++ を使用して、ユーザー データとアプリケーション データを正しい場所に格納する Windows XP アプリケーションを作成する方法
asp.net - App_Data にファイルを書き込むと、tempdata が null になる
ファイルを保存し、App_Data ディレクトリにディレクトリを作成できる小さな asp.net MVC 1 Web アプリがあります。書き込み操作が成功したら、tempdata にメッセージを追加し、redirectToRoute を実行します。問題は、アクションの実行時に tempdata が null であることです。Web アプリケーションのルート ディレクトリ以外のディレクトリにファイルを書き込むと、tempdata は null ではなく、すべてが正しく機能します。app_data に書き込むと tempdata がクリアされるように見える理由はありますか?
編集: DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment) が App_Data に書き込む場合、TempData はリダイレクト先のアクションで null になります。Web アプリのルート外のディレクトリであれば問題ありません。例外はスローされていません。
asp.net - DBをサーバーからアプリケーションのAppDataフォルダーにコピーするにはどうすればよいですか?
ローカルマシンのDBにアクセスするASP.NETアプリケーションに取り組んでいます。代わりに、このDBをアプリのAppDataフォルダーに配置したいので、VS SQLインスタンス内からmdfファイルにアクセスして簡単に作業し、プログラマー間で簡単にコピーして共有できます。
どうもありがとう!