2011-12-28 10 views
8

Tworzę bibliotekę klas, która pobiera pliki .SQL jako dane wejściowe (FileInfo) i ciąg połączenia. Następnie próbuje wykonać plik sql przeciwko połączeniu.Właściwy sposób wykrywania, czy zainstalowany jest plik SQLCMD.exe?

zdecydowałem się wspierać SMO Microsoftu i SQLCMD.exe

W testach, zauważyłem na wielu maszynach w moim otoczeniu, że nie przychodzi SQLCMD instalowany domyślnie. Moje błędy programu przy próbie uruchomienia procesu SQLCMD.exe.

Jaki jest właściwy sposób wyszukiwania go bez przeszukiwania całego dysku twardego? Czy istnieje wspólna lokalizacja rejestru, która określa, czy jest zainstalowana? Zwykle, gdy jest zainstalowany, myślę, że ustawiono lokalizację PATH.

Wielkie dzięki.

+0

Możesz spróbować wykonać 'sqlcmd.exe -?' W procesie w twojej aplikacji C# - jeśli to działa, wtedy SQLCMD jest obecny - jeśli nie, to powie ci coś w stylu "file not found" lub "command" invalid "lub coś ... –

+0

@marc_s yea o to właśnie myślałem ... po prostu nie to, co uważałem za najczystsze dla biblioteki klasowej, która będzie niezbędnym składnikiem wielu aplikacji. –

Odpowiedz

8

Mam 64 maszyny z 64-bitowym SERVER SQL (2k8 R2) i mój SQLCMD.EXE jest w c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE.

Jest również na ścieżce.

Można tylko patrzeć na ścieżkę bezpośrednio z umieszczeniem SQL Server Registry:

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

lub wariant w tej sprawie do innej wersji.

Najważniejszym problemem jest to, że SQLCMD jest częścią narzędzi klienta, a nie serwera SQL, więc uważam, że nie można wymagać od SQL Server, aby ci to powiedział. O ile oczywiście nie uruchamiasz samego serwera.

+1

SQL Server może zostać zainstalowany w innym katalogu (na przykład na D: dysku lub czymś) - więc sprawdzenie katalogu nie jest niezawodnym sposobem ... zdecydowanie powinieneś najpierw pobrać katalog 'Tools' z rejestru. .. –

+0

Należy pamiętać, że jeśli robisz to w języku C# i używasz metody Registry.LocalMachine.OpenSubKey(), lokalizacja x86 zostanie zwrócona na komputerach z 64-bitowymi oknami (np. C: \ Program Files (x86) \ ...). Otrzymasz "plik nie znaleziony" w tym przypadku, ponieważ SQL Server nie instaluje tam SQLCMD. Zauważ, że to dotyczy tylko twojej aplikacji x86. –

+4

Należy również pamiętać, narzędzia sql2012 instalują się w ..Microsoft SQL Server \ 110 \ Tools .. (tj. Nie "100") i nie są umieszczane w ścieżce, jeśli zainstalujesz osadzone narzędzie za pośrednictwem SqlCmdLnUtils.msi. Wydaje się nierozsądne użycie klucza reg, który zawiera również numer specyficzny dla wersji. A co z HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SqlCmdLnUtils \ CurrentVersion? – PandaWood

Powiązane problemy