2015-06-04 13 views
5

Tôi có một tình huống hơi lạ. Trong phương pháp onstart của một dịch vụ cửa sổ nếu tôi đặt đoạn mã sau:Đường dẫn tương đối không hoạt động trong dịch vụ windows

File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\TestFile.txt", "Started " + AppDomain.CurrentDomain.BaseDirectory); 

nó hoạt động và bên trong file văn bản này được lưu trữ:

Started C:\Users\guser\Documents\Visual Studio 2012\Projects\FreeSpaceControlService\FreeSpaceControlService\bin\Debug\ 

Các tập tin văn bản được tạo ra bên trong thư mục debug.

Nhưng nếu tôi sử dụng mã ví dụ thay vì ở trên (tại cùng một vị trí):

File.AppendAllText("TestFile.txt", "Started");   

Các tập tin văn bản không được tạo ra trong thư mục tương tự như trên. Tại sao nó không được tạo ra trong cùng một thư mục? (Dường như nó đã được tạo ra trong WIndows/System32 bây giờ mà tôi kiểm tra nó - có hai tập tin thực thi không? Tại sao thư mục Debug trả về đầu tiên?)

và nơi bạn thường dùng (trong đó đường dẫn) cài đặt cửa sổ dịch vụ và nhật ký ?

+0

Biến môi trường trong dịch vụ cửa sổ không giống như khi bạn đăng nhập. Chủ sở hữu dịch vụ phải được thay đổi để chạy người dùng thay vì quản trị viên. – jdweng

Trả lời

4

working directory of Windows services%WinDir%\System32.

Bạn có thể xác minh điều này cho chính mình:

File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\TestFile.txt", 
        "My working directory is: " + Directory.GetCurrentDirectory()); 

và nơi bạn thường (trong đó đường dẫn) cửa hàng cài đặt cho cửa sổ dịch vụ và các bản ghi?

  • Cài đặt: Trong đăng ký Windows.
  • Nhật ký: Trong nhật ký sự kiện Windows.
  • Bất kỳ tệp nào khác dịch vụ của bạn có thể cần: Một nơi nào đó bên dưới System.Environment.SpecialFolder.CommonApplicationData (ví dụ: C:\ProgramData\myService). Để biết thêm chi tiết, hãy xem câu hỏi sau:
    What is the significance of the ProgramData folder in Windows?.
2

Một đường dẫn tương đối được dựa trên 'thư mục hiện tại', AppDomain.CurrentDomain.BaseDirectoryEnvironment.CurrentDirectory không nhất thiết phải giống nhau.

+0

giải thích nhỏ ý nghĩa của từng ý nghĩa và cách liên quan đến dịch vụ cửa sổ sẽ được đánh giá cao hơn –

+0

Có, nhưng [tất cả đã được thực hiện trước đó] (http://www.c-sharpcorner.com/UploadFile/370e35/basedirectory-vs- currentdirectory-in-C-Sharp /) –

1

Tôi nhận ra rằng đây là câu hỏi cũ, nhưng tôi muốn cung cấp câu trả lời trong trường hợp nó có thể hữu ích cho người khác gặp phải câu hỏi này và cần câu trả lời.

tôi cần phải tìm ra một cái gì đó tương tự, tức là gọi một thực thi từ các thư mục mà các dịch vụ được cài đặt trong, câu trả lời cho câu hỏi này là hữu ích:

What directory does a Windows Service run in?

Cuối cùng, nó không phải là chấp nhận câu trả lời cho câu hỏi đó hữu ích, nhưng một câu trả lời khác. Tôi đã sử dụng mã này để truy cập vào thư mục đã cài đặt dịch vụ tại:

Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) 
Các vấn đề liên quan