2012-03-31 35 views
5

Tôi đã tạo ứng dụng chỉ hoạt động khi không chạy dưới dạng dịch vụ Windows. Vâng, các dịch vụ chạy, nhưng nó không làm những gì nó cần. Dịch vụ sử dụng tài khoản Dịch vụ cục bộ. Vì vậy, để khởi gỡ lỗi, tôi nghĩ rằng tôi muốn bắt đầu với một cái gì đó đơn giản: có nó tạo ra một thư mục khi nó bắt đầu:Dịch vụ Windows không thể ghi vào% LOCALAPPDATA%

Directory.CreateDirectory(
    Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 

Khi tôi bắt đầu dịch vụ, nó dừng lại gần như ngay lập tức và Windows báo cáo thực tế đó. Khi tôi nhận xét ra các tuyên bố trên, biên dịch lại và cài đặt lại, các dịch vụ chạy mà không dừng lại.

Rõ ràng là dòng trên ném một ngoại lệ của một số loại. Tôi không có cách nào để ghi lại lỗi vì tôi không thể ghi vào hệ thống tệp. Bất kỳ ý tưởng nào tại sao Dịch vụ cục bộ không thể tạo thư mục trong% LOCALAPPDATA% của riêng nó?

+3

Rất tiếc rằng mã này biên dịch: ( –

Trả lời

10

Bạn nên sử dụng GetFolderPath với LocalApplicationData như vậy:

string folderName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData), 
    "MyService"); 

Directory.CreateDirectory(folderName) 
+1

+ 1 Đánh bại tôi với nó: 0) – Tung

+1

Bây giờ tôi cảm thấy ngớ ngẩn. Tôi sẽ cung cấp cho nó một whirl ... –

+0

Cảm ơn. Thư mục 'C: \ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ MyService' đã được tạo. Bây giờ tôi có thể tiếp tục đăng nhập. –

0

Tôi đề nghị bạn viết chi tiết ngoại lệ cho nhật ký sự kiện. Tất cả tài khoản người dùng có quyền ghi vào sổ ghi sự kiện miễn là nhật ký và tên nguồn đã được tạo bởi một quản trị viên (bạn có thể thực hiện đơn giản bằng cách chạy ứng dụng như chính mình trước).

Vì nguyên nhân gốc của lỗi, nó có thể là vì LocalService thường không nhận được bộ thư mục hồ sơ đầy đủ được tạo theo mặc định. Tôi không chắc liệu điều này là do thiết kế hay đơn giản là những gì tôi đã quan sát trên các máy khác nhau.

+0

Cảm ơn .Tôi sẽ thử bản ghi sự kiện. Sự hiểu biết của tôi là (ít nhất là trên Windows 7) '% LOCALAPPDATA%' cho Dịch vụ Cục bộ là 'C: \ Windows \ ServiceProfiles \ LocalService \ AppData \ Local'. –

4

Tôi nghĩ rằng đây có thể là vì không có thư mục đặc biệt. Khi chạy dưới dạng tài khoản dịch vụ cục bộ bạn đang chạy dưới người dùng đó, không phải người dùng đã đăng nhập. vì vậy bạn đang yêu cầu một thư mục đặc biệt mà có thể sẽ không tồn tại, vì tôi không nghĩ rằng dịch vụ địa phương có một hồ sơ. (Tôi có thể sai) - tôi đã sai: p

Chỉ trong trường hợp bất cứ ai bật bởi:

C:\Windows\ServiceProfiles\LocalService 

là địa phương thư mục profile dịch vụ, vì vậy nó sẽ kết thúc ở đó.

Nếu bạn muốn gỡ lỗi nó bao quanh đó phù hợp với một catch, và sau đó viết sai vào một tệp:

try 
{ 
    Directory.CreateDirectory(Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 
} 
catch (Exception ex) 
{ 
    System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\MyServicelog.txt",true); 
    file.WriteLine(ex.Message); 
    file.Close(); 
} 

Ít nhất thì bạn có thể xem những gì gây ra lỗi

Martyn

+0

+1 có nhiều khả năng là không có tiểu sử. –

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