3


2

システム構成ディレクトリに相当するWindows

RubyでCLIアプリケーションを開発していますが、 / etc / appnamerc〜/ .appnamerc`の標準構成ファイルカスケードを介してUnixで構成できるようにしたいと思います。 ただし、アプリケーションはWindows環境で実行することも意図しており、 `/ etc / appnamerc(` C:\ windows \ system32 \ etc \ drivers`のようなファイルをどこに配置するかわからない正しい場所になるように)。 さらに、システム構成ファイルを検索するために私が決定したスキームはすべて、Windowsの異なるバージョン、つまり、 C:\ Users vs. C:\ Documents and Settings。 ユーザー固有の構成に関する限り、アプリケーションでユーザー固有の構成ファイルを検索する場所、およびそのようなものの標準的な命名規則はどこにあるのかもわかりません。

3 Answer


2


Windowsでは、SHGetSpecialFolderPath APIを使用してアクセスできる複数のhttp://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx [特殊フォルダー]を定義しています。 これらのフォルダーの場所のいずれかを使用することをお勧めします。

たとえば、一般的なアプリケーションフォルダーの場所を取得する方法は次のとおりです。

char szBuffer[1024];

// get the common application data folder
::SHGetSpecialFolderPath(0, szBuffer, CSIDL_COMMON_APPDATA, false);


1


shGetSpecialFolderLocation関数を使用する必要があります。 どの特定の定数を渡すか→ CSIDL_COMMON_APPDATA、CSIDL_LOCAL_APPDATA、CSIDL_COMMON_DOCUMENTSまたはCSIDL_PERSONAL

議論の問題です。 参照:http://www.icetips.com/blog/index.php/2008/10/31/title

さらに助けを求める


1


探しているのはhttp://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx[SHGetKnownFolderPath function](またはWindowsの古いバージョンではhttp:// msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx[SHGetFolderPath関数])。

Windowsには、これらのパスが何であり、どこに存在するかという規則がありますが、これはバージョン、構成、およびその他の要因に完全に依存するため、フォルダ名をハードコーディングするのは悪い考えです。 ただし、上記の機能は、最初から「特別な」フォルダの場所を取得する方法です。

これらの関数の主な引数は、http://msdn.microsoft.com/en-us/library/bb762584(VS.85).aspx [KNOWNFOLDERID]またはhttp://msdn.microsoft.com/en-のいずれかです。 us / library / bb762494(VS.85).aspx [CSIDL]は、取得するフォルダーを指定します。

実際には、Windows上のユーザー固有とマシン固有の2つの異なる「フラグ」があります。 場所は、単一のユーザーに固有の場合も、すべてのユーザーが使用できる場合もあり、単一のマシンに固有の場合も、ユーザーがアクセスできるすべてのマシンで使用できる場合もあります。 それらは以下で区別されます。

ここで必要なものは次のとおりです。

  • FOLDERID_ProgramData /` CSIDL_COMMON_APPDATA`:これはプログラム用です すべてのユーザー向けの設定なので、 `/ etc / foorc`とほぼ同等です。 そこにプログラムのディレクトリを作成し、そこにすべてのユーザーの構成を保存する必要があります。 このディレクトリは通常のユーザーに対しては書き込み不可であることに注意してください( `/ etc`も同様です)。 ただし、このディレクトリはマシン固有です。

  • FOLDERID_RoamingAppData /` CSIDL_APPDATA`:これはユーザー固有のものです 設定またはアプリケーションデータ。 ほとんどのユースケースでは、これは移動プロファイルに保存されるため、これを置く主な場所になります。したがって、ユーザーがログオンするすべてのマシンでアクセスできます。 したがって、これは `〜/ .foorc`に相当します。 すべてのユーザーバリアントと同じルールが適用されます。

  • FOLDERID_LocalAppData /` CSIDL_LOCAL_APPDATA`:これは ユーザー固有のデータのマシン固有の場所。 通常、これはキャッシュのようなものに使用する必要がありますが、ユーザーがログオンするたびにネットワーク上でコピーする必要はありません。 Thunderbirdでは、IMAPメールのローカルコピーをローミングプロファイルに保存する際にこれが非常に間違っていることに注意してください。これは、そこに複数のGiBのデータがある場合、ちょっと楽しいです。

一般的に、ユーザーのプロファイルフォルダに `.foorc`を貼り付けないようにしてください。 WindowsはUNIXではなく、ドットで始まるファイルは自動的に隠されません(そのためのファイルシステムフラグがあります)。 私にとって、ユーザーのプロファイルディレクトリはWindowsでそのようなことをする場所ではないため、アプリケーションがそれを行うのは面倒です。 http://blogs.msdn.com/oldnewthing/archive/2006/12/28/1374334.aspx [同様に、Documentsフォルダは、アプリケーションがユーザーの同意または明示的なアクションなしでコンテンツを作成するのに適した場所ではありません。]

Rubyから、Win32APIライブラリを使用してこれらの関数を呼び出すことができるはずです。 Thisは、漠然と有望に見えます(いですが)。ただし、実際の例を示すのに十分な知識はありません。

最後の選択肢は、環境変数を使用することです。 環境変数「ALLUSERSPROFILE」、「APPDATA」、および「LOCALAPPDATA」は、上記のFolderIDとそれぞれ同等です。