C#のマシン名からドメイン名を削除する安全な方法はありますか?
例:
MYMACHINE.mydomain.com
解決する必要があります
MYMACHINE
素朴な文字列アプローチ:
string fullName = "MYMACHINE.mydomain.com";
string resolvedMachineName = fullName.Split('.')[0];
マシン名の「基本的な」理解が必要な場合は、次を使用します。
Environment.MachineName
ドメインなしでマシン名を提供します (従来はCOMPUTERNAME
コマンド プロンプトの変数)。参照: http://msdn.microsoft.com/en-us/library/system.environment.machinename.aspx
編集 #1
@Antineutrino - 回答を読み直したときに、正しい回答を提供するのに十分な情報がないことに気付きました。ただし、「マシン名」と言うと、持っている文字列を解析する方法を知りたいのか、それとも必要なものを取得する適切な方法を知りたいのかは明確ではありません。文字列を解析する方法を知りたいだけの場合は、他の答えが正しいです。一方で...
NetBios 名またはクラスター名が必要ですか? それでEnvironment.MachineName
クラスターを実行しているマシンの基本的な名前が必要ですか? WMI クラスを詳しく調べる必要があります。
現在のマシンに解決されるすべての DNS 文字列から最も具体的な名前が必要ですか? つまり、web1.mysite.com の web1 ですか? マシンにバインドされているすべての IPを解決する必要があります。
戻って質問を編集/修正して詳細を追加すると、より良い/より具体的な回答が得られます。
編集 #2
私の理解が正しければ、シナリオは次のとおりです。デスクトップ環境のクライアント マシンとサーバー マシンの両方で実行される同様のコードがあります。すべてのマシン レジストリで、サーバーの DNS 名 (server.myapp.com) を保存しました。ここで、マシンがサーバーであるかどうかを判別するコードを作成します。
あなたが求めたもの
string serverName = Registry.GetValue(REG_KEY, REG_VALUE, "key missing");
string currentMachine = Environment.MachineName;
if (currentMachine.ToLower() == serverName.ToLower().Split('.')[0] ) {
//do something fancy
};
別のアイデア
サーバー名を小さくする代わりに、マシン名を大きくすることができます。
string serverName = Registry.GetValue(REG_KEY, REG_VALUE, "key missing");
string currentMachine = Environment.MachineName +
Environment.GetEnvironmentVariable("USERDNSDOMAIN");
if (currentMachine.ToLower() == serverName.ToLower() ) {
//do something fancy
};
あなたが望むかもしれないもの
レジストリ キーの配布は少し面倒に思えます。もしそれが私だったら、おそらく次のうちの1つ/いくつか/多くを行うでしょう:
さまざまなビルド構成を作成し、プリプロセッサ ディレクティブを使用してコードを変更します。非常に大まかに次のようなもの:#if(RELEASE_SERVER) { /*do server code*/} #if(RELEASE_CLIENT) { /*do server code*/}
app.config を使用します ---これは、構成データを保存するためにあるものです。レジストリを汚染する必要はありません。app.configは build/deployment で変換するか、1 つのサーバーで手動で変更することができます。
構成データの大部分を中央の場所に保存します。このように、アプリが知る必要があるのは、その構成を取得することだけでした (それ自体であっても)。