2013-05-13 47 views
5

Tôi có hai tệp nhị phân và phải tạo một dịch vụ cho chúng. Tôi đã thử một giải pháp bằng cách sử dụng "sc create" từ How to install a Windows service with Inno Setup?Cài đặt Inno: Cài đặt các dịch vụ Windows bằng cách sử dụng "sc create"

Nhưng nó không hiệu quả đối với tôi. Nó bị kẹt ở cuối quá trình cài đặt. Tôi đang làm gì sai?

Đây là mã của tôi:

Filename: {cmd}; Parameters: "sc create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden 

tôi đã cố gắng sử dụng cmd thay vì {cmd} - không có sự thay đổi.

Tôi không thử mã Pascal trong giải pháp mà tôi đã giới thiệu. Tôi giữ nó như là phương sách cuối cùng.

+1

bản sao có thể có của [Cách cài đặt dịch vụ Windows bằng Thiết lập Inno?] (Http://stackoverflow.com/questions/15204587/how-to-install-a-windows-service-with-inno -setup) – TLama

+1

vì vậy bạn muốn nói rằng tôi phải sử dụng mã pascal có trong giải pháp mà bạn đã đề cập. – rakesh

+2

Không phải là bạn phải, chỉ là bạn nên. – TLama

Trả lời

15

tôi đã sử dụng đoạn mã này và cả các dịch vụ của tôi đang cài đặt và gỡ bỏ cài đặt:

[run] 
Filename: {sys}\sc.exe; Parameters: "create mysrv start= auto binPath= ""{app}\mysrv.exe""" ; Flags: runhidden 

[UninstallRun] 
Filename: {sys}\sc.exe; Parameters: "stop mysrv" ; Flags: runhidden 
Filename: {sys}\sc.exe; Parameters: "delete mysrv" ; Flags: runhidden 

này giải quyết vấn đề của tôi, vậy tại sao tôi nên sử dụng Pascal trong trường hợp này.?

+6

* Tại sao tôi nên sử dụng Pascal trong trường hợp này? * Vì bạn không thể xử lý hoặc phản ứng nếu có sự cố với tập lệnh này? Tôi biết bạn không quan tâm bây giờ, nhưng sớm hay muộn bạn sẽ. Người dùng của bạn có thể ngạc nhiên nếu bạn nói với họ rằng quá trình cài đặt đã thành công và nếu họ chạy ứng dụng mong đợi dịch vụ chạy ứng dụng không thành công vì dịch vụ sẽ bị dừng thực sự, nhưng bạn sẽ không nhận thấy việc khởi động dịch vụ không thành công trong trình cài đặt . – TLama

+1

đó là một điểm tốt. tôi sẽ ghi nhớ điều đó. thanks – rakesh

8

Có lý do nào bạn đang cố gắng chạy qua {cmd} không?

Hoặc thêm tham số /C và báo phần còn lại theo yêu cầu hoặc chỉ chạy sc.exe với thông số bắt buộc.

[Run] 
Filename: "sc.exe"; Parameters: "create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden 

Lưu ý rằng cách đúng để cài đặt dịch vụ là API được đề cập trong this answer cho phép bạn phát hiện và xử lý lỗi.

1

tại sao không chỉ

[chạy] Tên tập tin: {sys} \ sc.exe; Tham số:/cài đặt

+3

Vì không có tham số '/ install'. Và không biết ít nhất tên tệp dịch vụ, công cụ sẽ bị mất việc cần làm. – TLama

+1

Điều này cũng trùng lặp một câu trả lời được đưa ra 7 tháng trước. – Deanna

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