Как проверить удаленную запись DSN? - PullRequest
1 голос
/ 24 июня 2011

Я создаю утилиту проверки, которая проверяет различные части приложения, чтобы убедиться, что они настроены правильно. Я должен проверить, что запись DSN в файле Web.config является функциональным DSN и что DSN указывает на правильный сервер SQL и базу данных.

В настоящее время вы можете запустить утилиту в одном из двух режимов, локальном или удаленном. Моя проблема возникает, когда я пытаюсь проверить удаленный системный DSN на моем локальном компьютере. Я знаю, почему это не работает, у меня нет того же DSN на моем локальном компьютере. Поэтому мне нужно выяснить, как получить информацию о соединении DSN с удаленного компьютера, к которому у меня есть административный доступ, или заставить удаленный компьютер проверить его для меня.

Есть предложения? Спасибо!

EDIT
Очевидно, что информация о 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();

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

В этом случае вы можете захотеть изучить PSExec (от Sysinternals).Вы можете запустить свою утилиту на удаленном компьютере в «локальном» режиме, если у вас есть административный доступ к этому компьютеру.

Ваша часть «Проверка DSN» должна быть отдельным исполняемым файлом / командой, которая может выполняться вашей основной утилитой с использованием синтаксиса, подобного следующему:

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

Вывод может бытьперехвачен в C # путем перенаправления stdout / stderr.

Простите, если я ошибаюсь, но не откроет ли просто подключение к удаленному серверу базы данных, чтобы узнать, в порядке ли ваша строка подключения / DSN?

0 голосов
/ 07 июля 2011

Таким образом, значения 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();
0 голосов
/ 24 июня 2011

Ну, я бы сказал, что это не совсем правильная проверка, если вы запускаете его в другой системе (вашей).Правила брандмауэра могут отличаться, версии драйверов могут быть отключены, и еще миллион вещей.Первое, что я бы сказал, если это веб-приложение, создайте страницу, которая может выполнять эти проверки, например страницу состояния.Если это приложение, которое вы не можете сделать, вы можете использовать WMI для запуска удаленного процесса и сбора результатов.Кроме этого, ваш последний вариант может заключаться в том, чтобы сделать самостоятельно размещаемую службу WCF или службу Windows, к которой вы подключаетесь для запроса информации.Это не слишком редко, и я делал это много раз, используя WMI.

...