2011-12-28 12 views
8

私は入力(FileInfo)と接続文字列として.SQLファイルを取るクラスライブラリを作成しています。次に、接続に対してSQLファイルを実行しようとします。 SQLCMDは、デフォルトでインストールされていませんので、SQLCMD.exeがインストールされているかどうかを検出する適切な方法はありますか?

私はMicrosoftのSMOをサポートすることを決定したとSQLCMD.exeテストで

、私は私の環境では、多くのマシンに気づきました。プロセスSQLCMD.exeを実行しようとすると、私のプログラムのエラーが発生します。

ハードドライブ全体を検索せずにそれを探す適切な方法は何ですか?それがインストールされているかどうかを指定する一般的なレジストリの場所はありますか?通常、インストールされると、PATHの場所が設定されていると思います。

多くのありがとうございます。

+0

C#アプリケーションのプロセスで 'sqlcmd.exe - ?'を実行しようとすると、動作していればSQLCMDが存在します - そうでなければ "ファイルが見つかりません"や "コマンド無効な "か何か... –

+0

@marc_sうん、それは私が考えていたものです...私は多くのアプリケーションの不可欠なコンポーネントとなるクラスライブラリのための最もクリーンなと思ったものではありません。 –

答えて

8

私は64ビットのSQL Server(2k8 R2)で64台のマシンを持っており、SQLCMD.EXEはc:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXEです。

これはパス内にもあります。

あなただけのSQL Serverのレジストリの場所から直接パスを見ることができる:この上

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup\path 

または変異体を異なるバージョンの。

大きな問題は、SQLCMDがSQL Serverではなくクライアントツールの一部なので、SQL Serverにあなたに伝えるように頼むことはできないと考えています。もちろん、サーバー自体で実行している場合を除きます。

+1

SQL Serverは別のディレクトリ(D:ドライブなど)にインストールすることができます。ディレクトリを確認することは信頼性の高い方法ではありません。まず、レジストリから 'Tools'ディレクトリを取得する必要があります。 .. –

+0

C#でこれを実行していて、Registry.LocalMachine.OpenSubKey()メソッドを使用すると、64ビットウィンドウを実行しているマシン(たとえば、C:\ Program Files(x86)\ ...)。この場合、SQL ServerはSQLCMDをインストールしないため、「ファイルが見つかりません」というメッセージが表示されます。これは、アプリケーションがx86の場合にのみ適用されます。 –

+4

また、sql2012ツールは..Microsoft SQL Server \ 110 \ Tools ..(つまり '100'ではない)にインストールされ、SqlCmdLnUtils.msi経由で組み込みツールをインストールするとパスに入りません。バージョン固有の番号も含むregキーを使用するのは賢明ではないようです。 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SqlCmdLnUtils \ CurrentVersionはどうですか? – PandaWood

関連する問題