2008-11-11 32 views
9

Chúng tôi đang sử dụng dòng lệnh sau từ bên trong một dịch vụ Windows phát triển với C# .Net Framework 1.1:"sử dụng net" lệnh trong một dịch vụ Windows

net use z: \\myComputer\c$ 

dịch vụ đang chạy dưới một tài khoản tên miền đó là một quản trị viên cục bộ trên "myComputer". Sau khi gỡ lỗi mã, chúng ta có thể thấy rằng nó không trả về bất kỳ lỗi nào nhưng ổ "z:" không bao giờ được ánh xạ. Chúng tôi đã thử chính xác cùng một mã từ một ứng dụng giao diện điều khiển và nó hoạt động đúng. Chúng ta cần thêm gì vào Dịch vụ để thực hiện công việc này?

Mã chúng tôi đang sử dụng được bao gồm bên dưới.

Kính trọng,
Sergio

startInfo.FileName = "net"; 
startInfo.Arguments = string.Format(@"use {0}: \\{1}\{2}", driveLetter, 
            computerName, folder).Trim(); 
startInfo.UseShellExecute = false; 
startInfo.RedirectStandardError = true; 

proc.EnableRaisingEvents = false; 
proc.StartInfo = startInfo; 

proc.Start(); 

// If there is an error during the mapping of the drive, it will be read 
// from the StandardError property which is a StreamReader object and 
// be fed into the error output parameter. 
using(StreamReader errorReader = proc.StandardError) 
{ 
     string standardError = string.Empty; 
    while((standardError = errorReader.ReadLine()) != null) 
    { 
     error += standardError + " "; 
    } 
} 
proc.WaitForExit(); 

Trả lời

0

Bạn có thể cần phải xác định tài khoản được sử dụng để đăng nhập. Nhập net use /? trên lời nhắc lệnh để nhận trợ giúp thiết lập điều đó bằng lệnh.

0

Tôi nghi ngờ rằng đó là do dịch vụ không chạy trong ngữ cảnh của người dùng cục bộ. Như tôi đã nhớ, bạn có thể định cấu hình dịch vụ cửa sổ từ nhiều năm trước thành 'tương tác với máy tính để bàn' hoặc một cái gì đó tương tự.

14

Từ http://msdn.microsoft.com/en-us/library/ms685143.aspx:

Một dịch vụ (hoặc bất kỳ quá trình chạy trong một bối cảnh an ninh khác nhau) mà phải truy cập tài nguyên từ xa nên sử dụng Universal Naming Convention (UNC) tên để truy cập tài nguyên . Dịch vụ phải có các đặc quyền thích hợp để truy cập tài nguyên. Nếu dịch vụ phía máy chủ sử dụng kết nối RPC , ủy quyền phải được bật trên máy chủ từ xa.

Chữ cái ổ đĩa không phải là toàn cầu đối với hệ thống . Mỗi phiên đăng nhập nhận được bộ ký tự ổ đĩa riêng từ A đến Z. Do đó, các ổ đĩa được chuyển hướng không thể được chia sẻ giữa các quá trình chạy trong các tài khoản người dùng khác nhau. Hơn nữa, một dịch vụ (hoặc bất kỳ quá trình chạy trong phiên đăng nhập của riêng mình) không thể truy cập các ký tự ổ đĩa được thiết lập trong một phiên đăng nhập khác nhau.

Một dịch vụ không nên truy cập trực tiếp nguồn lực địa phương hoặc mạng thông qua ký tự ổ đĩa ánh xạ, và cũng không nên nó gọi lệnh Net Use để ánh xạ ổ đĩa thư tại thời gian chạy.

1

Bạn không thể truy cập thuộc tính người dùng từ dịch vụ cửa sổ (bao gồm HKEY-CURRENT-USER từ sổ đăng ký) vì dịch vụ không chạy như người dùng đã đăng nhập.

Ổ đĩa được ánh xạ là một phần của cài đặt người dùng, do đó bạn không thể sử dụng chúng làm dịch vụ trừ khi bạn tìm hiểu các thuộc tính người dùng trong sổ đăng ký theo cách thủ công, ánh xạ ổ đĩa trong dịch vụ của bạn.

Điều bạn có thể muốn thử làm là đặt câu hỏi về cách Dịch vụ của bạn thực thi chuỗi đăng nhập (có thể là một số .EXE).Điều đó có thể làm điều đó cho bạn.

Hy vọng điều này sẽ giúp, Alan.

0

Tôi đã làm một cái gì đó tương tự như đăng nhập vào một máy chủ từ xa, nhưng không có phần ổ đĩa được ánh xạ. Tôi không thích sử dụng các ổ đĩa được ánh xạ; trong các chương trình có nghĩa là, tôi sử dụng subst cho thuận tiện tất cả các thời gian. Dù sao, tôi chỉ bị buộc phải chắc chắn bao gồm

use \\server\c$ /user:admin password 

hoặc bất cứ người dùng/mật khẩu của bạn có quyền truy cập đến máy chủ từ xa, sau đó nó không có vấn đề gì các dịch vụ được đăng nhập như.

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