2009-03-26 33 views
8

Làm cách nào để phát hiện xem Sql Server Express có được cài đặt và chạy trên máy trong trình cài đặt WiX không?Cách phát hiện SQL Server Express trong trình cài đặt WiX

Tôi muốn kiểm tra trước khi cài đặt ứng dụng và nếu nó chưa được cài đặt và đang chạy, để thông báo cho người dùng rằng trước tiên phải cài đặt ứng dụng trước khi cài đặt ứng dụng của tôi.

Trả lời

11

Ok, tôi tìm thấy bằng cách dùng thử và lựa chọn lỗi mà hoạt động:

<Property Id="SQLSERVER"> 
    <RegistrySearch Id="SQLServer" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server" Type="raw" Name="InstalledInstances"/> 
</Property> 

tôi xác định một tìm kiếm registry, và sau đó kiểm tra giá trị của nó:

<Condition Message="You don't have SQL Server installed."> 
    <![CDATA[SQLSERVER >< SQLEXPRESS]]> 
</Condition> 
+0

Hoàn hảo, chỉ cần nhấn cùng một vấn đề. Lúc đầu, tôi nghĩ rằng nó sẽ không hoạt động cho trường hợp có cả SQL Server Standard & Express được cài đặt, nhưng sau đó nhận thấy "><" mà sau một chút đào tôi phát hiện có nghĩa là trái có quyền, kỳ quặc tôi không thể tìm thấy đề cập đến điều hành biểu thức điều kiện được đề cập trong tài liệu Wix, nhưng đã tìm thấy nó ở đây: http://www.tramontana.co.hu/wix/lesson6.php. – Bittercoder

+0

Bạn sẽ không tìm thấy giá trị InstalledInstance trên phiên bản Windows 64 bit. – jmayor

+0

bạn cần thay đổi thành Wow6432Node thay vì HKLM \ SOFT .. \ MSFT .. – jmayor

5

tôi đã cố gắng giải pháp Krzysztof của (ở trên) - nhưng trên một số máy khi sử dụng phương pháp này, nó đã không được phát hiện chính xác khi họ đã làm không có cài đặt Sql Express.

Có vẻ như do việc xử lý sai giá trị đăng ký REG_MULTI_SZ InstalledInstances?

Vì tôi đã kiểm tra xem liệu có cần dừng/khởi động lại dịch vụ Sql Server Express trong trình cài đặt hay không, nên tôi chỉ kiểm tra thay vào đó - vì vậy đây là lựa chọn thay thế của tôi, nơi tôi chỉ kiểm tra dịch vụ thay thế:

<Property Id="SQLEXPRESSINSTALLED" > 
    <RegistrySearch Id="IsSqlExpressServiceInstalled" Root="HKLM" Key="SYSTEM\CurrentControlSet\services\MSSQL$SQLEXPRESS" Name="Description" Type="raw" Win64="no"/> 
</Property>  

<Condition Message="Express Not Installed">SQLEXPRESSINSTALLED</Condition> 

<Condition Message="Express Installed">NOT SQLEXPRESSINSTALLED</Condition> 

Bit của một hack, nhưng dường như làm việc tốt đủ cho khách hàng của chúng tôi (đã sử dụng các điều kiện trong thành phần, chứ không phải sau đó các điều kiện ví dụ Launch hiển thị ở trên)

0

Câu trả lời được chấp nhận trên đã luôn luôn đi qua tình trạng này cho tôi. Tôi đã sử dụng nó:

<Property Id="SQLSERVER_INSTANCE"> 
    <RegistrySearch Id="SQLServerRegSearch" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server\Instance Names\SQL" Type="raw" Name="SQLEXPRESS"/> 
</Property> 
<Condition Message="You don't have SQL Server installed."> 
    <![CDATA[SQLSERVER_INSTANCE]]> 
</Condition> 
+0

Tất cả các câu trả lời dường như cũng đưa ra giả định tương tự - rằng thể hiện SQL Express được cài đặt với một tên dụ 'SQLEXPRESS'. Trong khi đó * là * mặc định, nó có thể thay đổi. –

+0

Đó là sự thật, vì vậy thay cho SQLEXPRESS bạn nên kiểm tra tên cá thể mà bạn cần, bất kể nó có thể là gì. – patrickbadley

Các vấn đề liên quan