2012-05-03 51 views
15

Tôi đã tạo một dịch vụ cửa sổ và cài đặt nó, tôi đã tạo dự án triển khai và cài đặt nó. Sau khi cài đặt tôi nhìn nó. Nó đã bắt đầu thành công.lỗi trong khi cài đặt dịch vụ cửa sổ System.Security.SecurityException

Ngày hôm sau tôi đã thực hiện một số sửa đổi và xây dựng lại và cài đặt lại nhưng hiện tại không cài đặt.

Sau đó, tôi nghĩ vấn đề của nó với trình cài đặt, cho phép tạo trình cài đặt tùy chỉnh cho dịch vụ để bất cứ lúc nào tôi có thể cập nhật mã của mình.

Tôi đã tạo nó giống như trường hợp này nếu có ai cần điều này trong tương lai.

public class MyInstaller : Installer 
    { 
     ServiceProcessInstaller spi; 
     ServiceInstaller si; 
     public MyInstaller() 
     {    
      spi = new ServiceProcessInstaller(); 
      spi.Account = ServiceAccount.LocalSystem; 

      si = new ServiceInstaller(); 
      si.StartType = ServiceStartMode.Manual; 
      si.ServiceName = "MyService"; 
      si.DisplayName = "My Service"; 
      si.Description = "service installed from command line"; 

      this.Installers.Add(spi); 
      this.Installers.Add(si); 

     } 
} 

Tôi gọi nó từ phương pháp chính bằng cách kiểm tra tham số args.

      case "-i": 
          case "-install": 
           ti = new TransactedInstaller(); 
           mi = new MyInstaller(); 
           ti.Installers.Add(mi); 
           string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log"; 
           ctx = new InstallContext(logPath, cmdline); 
           ti.Context = ctx; //.Context (ctx); 
           ti.Install(new Hashtable()); 
           break; 

Bây giờ khi tôi đang cố cài đặt. Tôi đã nhận lỗi System.Security.SecurityException: Không tìm thấy nguồn, nhưng một số hoặc tất cả nhật ký sự kiện không thể tìm kiếm được. Nhật ký không thể truy cập: Bảo mật.

Tôi google nó, và đến để biết dịch vụ sẽ cố gắng truy cập nhật ký ứng dụng trong khi cài đặt và ghi nhật ký ở đó.

Tôi không viết bất kỳ nhật ký sự kiện nào. Tôi có log4net để đăng nhập. Nhưng vẫn là hành vi mặc định của nó.

Làm cách nào để khắc phục sự cố này ngay bây giờ? Nó không được cài đặt ngay cả khi tôi có tất cả các quyền.

Cảm ơn

Trả lời

56

Tôi thấy rằng đôi khi bạn có thể cần phải "Chạy với tư cách là quản trị viên". Nếu bạn đang cài đặt từ dấu nhắc lệnh, bạn có thể cần phải bắt đầu rằng bằng "Chạy với tư cách Quản trị viên".

+0

Tôi đã làm điều đó bằng cách sử dụng cntrl + shift + enter in run.Sau đó, một lần nữa tôi manaully phải bấm và chạy như admin và nó đã làm việc con người. cảm ơn những gì một sai lầm ngớ ngẩn tôi đang làm. nhưng tôi muốn biết cách cải thiện hiệu suất khởi động/dừng của dịch vụ cửa sổ. – sunder

+0

@sunder: hiệu suất bắt đầu/dừng sẽ có * lot * để thực hiện những gì dịch vụ của bạn đang thực hiện. 'Bắt đầu' nên được OK vì thông thường bạn woud quay lên một sợi mới mà không làm việc. Để ngăn chặn bạn sẽ cần một số cách nhanh chóng để ngăn chặn những gì các chủ đề được lên đến. Vì vậy, không có cách chung để cải thiện hiệu suất. –

+0

Tôi đã tạo một tệp lô (.BAT) để cài đặt dịch vụ và tôi đã chạy hàng loạt với tư cách quản trị viên nhưng nó không hoạt động. Sau đó, tôi chạy dấu nhắc lệnh là quản trị viên và cài đặt dịch vụ mà không có tệp BAT, chỉ cần gõ tên của tệp cài đặt EXE. Tôi không chắc tại sao điều này lại xảy ra nhưng có lẽ nó có thể giúp đỡ người khác. Tôi nghĩ rằng nó có thể liên quan đến thực tế là chạy một tập tin BAT như admin không phải là thực hiện mã bạn viết ở đó như là admin, chỉ cần các tập tin BAT. –

1

Tôi có thể đã có một nguyên nhân gốc riêng cho thư, nhưng tôi đã sửa nó bằng cách thay đổi dịch vụ của tôi để chạy dưới dạng LocalSystem (đó là những gì tôi muốn) thay vì LocalService.

0

tôi có thể xác nhận rằng dưới "windows 7 64 bit" VÀ "Windows 10" bạn phải:

1) chạy Visual Studio lệnh prompt as administrator (nhấp chuột phải .. Khác .. tun như admin)

enter image description here

2) chuyển đến thư mục "obj" nơi bạn có exe. (cd [tất cả đường dẫn đến \ obj]) 3) khởi chạy installutil [myservice.exe]

nếu không chạy dưới dạng "quản trị", nó không thành công ngay cả trên win7 cũ. :(

lưu ý: MSDN không giải thích nó:

(tại địa chỉ: https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer)

"Để cài đặt một dịch vụ Windows, bạn phải có chứng chỉ quản trị trên máy tính mà bạn đang cài đặt nó."

:)

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