2009-09-28 50 views
9

Tôi đang cài đặt dịch vụ Windows bằng WiX. Làm thế nào tôi có thể làm cho dịch vụ chạy trong ngữ cảnh của Người dùng Windows chạy trình cài đặt?Dịch vụ WiXCài đặt - cài đặt dịch vụ để chạy khi người dùng cửa sổ hiện tại

+0

Tại sao bạn muốn chạy dịch vụ với tư cách người dùng hiện tại? Phần lớn điểm của một dịch vụ là có thể chạy khi không có người dùng đăng nhập - và để có thể chạy như LocalSystem để tạo điều kiện cho quyền quản trị cho tệp thực thi. Tôi chắc chắn bạn có một lý do chính đáng ... –

+2

Một lý do tại sao bạn sẽ chạy nó như một người dùng cụ thể là nó cần một kết nối đến máy chủ SQL và máy chủ SQL được cấu hình để sử dụng Windows Authentication ... nó dễ dàng hơn để không có để thêm "Local Service" vào danh sách SQL Users. –

Trả lời

21

Bạn cần có cả tên tài khoản và mật khẩu cho người dùng bạn muốn chạy dịch vụ. Tôi đã có thể thực hiện điều này bằng cách thêm một giao diện người dùng tùy chỉnh vào trình cài đặt của tôi yêu cầu Tên người dùng và Mật khẩu, và sau đó sử dụng các giá trị được cung cấp cho các thuộc tính Tài khoản và Mật khẩu trên phần tử ServiceInsall.

Lưu ý rằng tài khoản nào được sử dụng để chạy dịch vụ sẽ cần phải có đặc quyền Đăng nhập là dịch vụ. Điều này không được cấp cho người dùng theo mặc định. Tôi đã có thể sử dụng phần tử User từ lược đồ UtilExtension để thêm private priveledge này cho người dùng. Việc thêm đặc quyền cho người dùng sẽ chỉ thành công nếu người dùng chạy trình cài đặt là quản trị viên.

Đây là mã tôi đã sử dụng. SERVICECREDENTIALS_USERLOGIN và SERVICECREDENTIALS_PASSWORD là các thuộc tính được điền từ giao diện người dùng tùy chỉnh.

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 
    <File Id="ServiceEXE" Name="YourService.exe" DiskId="1" 
     Source="path\to\YourService.exe" KeyPath="yes" /> 
    <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]" 
      LogonAsService="yes" /> 
    <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService" 
        DisplayName="Your Service" Description="Your Service description" 
        Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]" 
        ErrorControl="normal" Interactive="no" /> 
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" /> 
</Component> 
+0

bạn có thể giúp tôi làm thế nào tôi có thể có 2 thành phần 1 cho SQL xác thực và 1 cho Windows xác thực tức là làm thế nào để thêm điều kiện. –

+0

Mã này có hoạt động không? đặt đặc quyền LogonAsService * và * danh tính dịch vụ dường như không được lên lịch tuần tự trong gói .msi kết quả. Vì lý do này, cài đặt không thành công ... Hoặc tôi có thiếu thứ gì đó không? –

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