2009-10-16 43 views
31

Tôi đang cố gắng triển khai một dịch vụ mà tôi đã viết. Đây là tệp InstallLog:Cài đặt Dịch vụ Windows tự phát triển

Installing assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Installing service TweetLinkService... 
Creating EventLog source TweetLinkService in log Application... 
Rolling back assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Restoring event log to previous state for source TweetLinkService. 
An exception occurred during the Rollback phase of the System.Diagnostics.EventLogInstaller installer. 
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 
An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete. 

Như bạn có thể thấy, nó không hoạt động. Tôi không chắc chắn làm thế nào để tiến hành, và đã nhấn tường với Bing và Google. Tôi đã đặt Tài khoản thành LocalSystem cho serviceProcessInstaller1. Các mã biên dịch tốt, nhưng bây giờ tôi muốn chạy điều ... bất kỳ ý tưởng? Tôi là một quản trị viên trên hộp của tôi, và tôi chạy lệnh:

InstallUtil TweetLinkQueue.exe

từ VS2008 quản trị giao diện điều khiển.

CẬP NHẬT VỚI tùy chọn/ShowCallStack

Call Stack

An exception occurred during the Install phase. 
System.Security.SecurityException: The source was not found, but some or all eve 
nt logs could not be searched. Inaccessible logs: Security. 
    at System.Diagnostics.EventLog.FindSourceRegistration(String source, String m 
achineName, Boolean readOnly) 
    at System.Diagnostics.EventLog.SourceExists(String source, String machineName 
) 
    at System.Diagnostics.EventLogInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt 
ate) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.TransactedInstaller.Install(IDictionary saved 
State) 

và ở đây là các nhà xây dựng:

public TweetLinkService() 
{ 
    InitializeComponent(); 

    if (!EventLog.SourceExists("TweetLinkQueue")) 
    { 
     EventLog.CreateEventSource("TweetLinkQueue", "Log"); 

     TweetLinksLog.Source = "TweetLinkQueue"; 
     TweetLinksLog.Log = "Log"; 

     TweetLinksLog.WriteEntry("Log Created!"); 
    } 
} 

CẬP NHẬT với Entry Point:

namespace TweetLinkQueue 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new TweetLinkService() 
      }; 
      ServiceBase.Run(ServicesToRun); 
     } 
    } 
} 
+0

Bạn có nhận thêm bất kỳ thông tin nào nếu bạn chạy installutil với tùy chọn/ShowCallStack không? – itowlson

+0

Thông tin tệp nhật ký nằm trong câu hỏi trên. –

+0

Người dùng bạn đang cố cài đặt dịch vụ có quyền ghi vào Nhật ký sự kiện bảo mật không? – Oded

Trả lời

13

Tôi không phải chắc chắn vấn đề cụ thể của bạn là gì. Dường như với tôi như vấn đề xảy ra trong khi tạo nguồn EventLog. Kiểm tra kỹ xem bạn đã thực hiện đúng phần đó chưa. Bạn có thể tham khảo từng bước here. CHỈNH SỬA: ĐẶC BIỆT LỰA CHỌN Ở BƯỚC 9. Sự cố có thể xảy ra do bạn đang gây rối với Nhật ký ứng dụng thay vì một bản ghi cụ thể cho ứng dụng của bạn.

Không có gì sai khi sử dụng InstallUtil, nhưng nếu bạn cần cài đặt dịch vụ của mình trên máy ngoại, InstallUtil không được đảm bảo ở đó. Bạn có thể làm theo bước này theo từng bước để làm cho bản cài đặt/gỡ cài đặt dịch vụ Windows của chính bạn mà không cần InstallUtil. Xem here để được hướng dẫn.

2

Tài khoản LocalSystem thường không có quyền đọc Nhật ký sự kiện bảo mật (hoặc để tạo nguồn sự kiện cho vấn đề đó).

Giải pháp dễ nhất và an toàn nhất là tạo chương trình cài đặt nguồn sự kiện mà bạn có thể chạy dưới thông tin đăng nhập cấp quản trị của riêng bạn trên bất kỳ máy nào bạn muốn chạy. Nó có thể là giá trị cố gắng này như là một thử nghiệm đơn giản, chỉ để xem nếu tài khoản của bạn có sự cho phép để làm điều này.

class Program { 
    static void Main(string[] args) { 
     EventLog.CreateEventSource("TestSource", "Application"); 
    } 
} 

Nếu bạn thực hiện điều đó, nó có thành công không? Bạn có thể kiểm tra nó bằng cách xem các thuộc tính của Nhật ký ứng dụng và duyệt các nguồn Sự kiện trên tab Bộ lọc của nó.

Cách khác, kể từ khi dịch vụ phải được cài đặt dù sao, bạn có thể thêm một EventLogInstaller (mà bị đặt tên sai - nó thực sự là một 'EventSourceInstaller' rằng sẽ tạo EventLogs khi cần thiết) để lắp ráp thay vì sử dụng EventLog.CreateEventSource trong constructor của dịch vụ.

+0

Đúng. Xem mã theo bước 9 tại http://stackoverflow.com/questions/593454/easiest-language-to-create-a-windows-service/593803#593803 để biết ví dụ về cách thực hiện việc này. –

+0

Đúng - đó chắc chắn là một ví dụ điển hình. –

109

Tôi vừa gặp sự cố này và đó là vì tôi không chạy lời nhắc lệnh phòng thu trực quan làm quản trị viên.

+8

Điều này phải được đánh dấu là câu trả lời. –

+0

điều này giải thích lý do tại sao nó hoạt động trên máy của tôi nhưng không phải trên sản xuất – TruthOf42

+2

Tôi đã tạo tệp BAT để cài đặt dịch vụ và tôi đang chạy tệp BAT với tư cách Quản trị viên (nhấp chuột phải vào tệp BAT và nhấp vào tùy chọn "chạy với tư cách quản trị viên") đã không làm việc. Để làm cho nó hoạt động tôi "chạy như quản trị viên" một dấu nhắc dòng commannd (cmd.exe) thay vì tập tin BAT. Sau đó, tôi đã cài đặt nó theo cách thủ công và nó hoạt động. –

8

Để giải quyết vấn đề này kích chuột phải vào Visual Studio 2008 Command Prompt của bạn và bấm chạy như quản trị viên sau đó bạn chạy lệnh của bạn như installutil C: \ mcWebService \ bin \ Debug \ mcWebService.exe sau đó nó sẽ hiển thị cho bạn tin nhắn thành công. Hy vọng điều này sẽ giải quyết được giải pháp của bạn.

0

Vấn đề của tôi là cửa sổ bật lên để nhập bằng chứng xác thực và tôi đã nhập tên người dùng của mình mà không có miền. Khi tôi nhập tên miền \ tên người dùng tất cả đều ổn.

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