1

アプリケーションのさまざまな部分をチェックして、正しく構成されていることを確認する検証ユーティリティを作成しています。私がチェックする必要があることの1つは、Web.configファイルのDSNエントリが機能的なDSNであり、DSNが正しいSQLサーバーとデータベースを指していることです。

現在、ユーティリティはローカルまたはリモートの2つのモードのいずれかで実行できます。ローカルコンピューターでリモートシステムDSNを検証しようとすると、問題が発生します。私はそれが機能しない理由を知っています、私は私のローカルコンピュータに同じDSNを持っていません。したがって、私が理解する必要があるのは、管理アクセス権を持つリモートマシンからDSN接続情報を取得する方法、またはリモートマシンにそれを確認させる方法です。

助言がありますか?ありがとう!

編集
だから、DSN情報もレジストリに保存されているようです!

oRegConn = new ConnectionOptions();
oRegConn.Username = username;
oRegConn.Password = password;
scope = new ManagementScope(@"//" + servername + @"/root/default", oRegConn);
registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);

inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\" + 
    dsnName;
inParams["sValueName"] = "Server";

outParams = registry.InvokeMethod("GetStringValue", inParams, null);
server = outParams["sValue"].ToString();
4

3 に答える 3

0

別のシステム(自分のシステム)で実行した場合、実際には有効なチェックではないと思います。ファイアウォールのルールが異なる可能性があり、ドライバーのバージョンがオフになっている可能性があります。私が最初に言うことは、これがWebアプリケーションである場合、ステータスページのように、これらのチェックを実行できるページを組み込むことです。これができないアプリケーションの場合は、WMIを使用してリモートプロセスを実行し、結果を収集できます。それ以外の最後のオプションは、情報を照会するために接続するセルフホスティングWCFサービスまたはWindowsサービスを実行することです。これはそれほど珍しいことではなく、WMIを使用して何度も実行しました。

于 2011-06-24T19:42:53.230 に答える
0

その場合は、PSExec(Sysinternalsによる)を調査することをお勧めします。リモートマシンへの管理アクセス権がある限り、そのマシンでユーティリティを「ローカル」モードで実行できます。

「DSN検証」部分は、次のような構文を使用してメインユーティリティで実行できる個別の実行可能ファイル/コマンドである必要があります。

psexec \\REMOTE-Machine <DSN Verification Utility>.exe

stdout / stderrをリダイレクトすることにより、出力をC#内でキャプチャできます。

私が間違っている場合は許してください。ただし、リモートデータベースサーバーへの接続を開くだけで、接続文字列/ DSNに問題がないかどうかを通知しませんか?

于 2011-06-24T19:48:11.620 に答える
0

したがって、DSN conn値は、私が必要としていたプレーンテキストとしてレジストリに保存されます。

oRegConn = new ConnectionOptions();
oRegConn.Username = username;
oRegConn.Password = password;
scope = new ManagementScope(@"//" + servername + @"/root/default", oRegConn);
registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);

inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\" + 
    dsnName;
inParams["sValueName"] = "Server";

outParams = registry.InvokeMethod("GetStringValue", inParams, null);
server = outParams["sValue"].ToString();
于 2011-07-06T20:13:06.363 に答える