2011-10-20 29 views
10

Chúng tôi có phương thức truy cập vào mạng chia sẻ. Phương thức này hoạt động tốt khi được gọi trực tiếp, nhưng chúng ta có được một System.IO.IOException khi nó được gọi thông qua reflecton. Dường như ngữ cảnh của người dùng không có sẵn cho mã được phản ánh (xem dấu vết ngăn xếp bên dưới). Có cách nào để ngăn chặn điều này?Truy cập mạng chia sẻ trong các cuộc gọi phương thức phản chiếu

System.Reflection.TargetInvocationException: Exception has been thrown by 
the target of an invocation. ---> System.IO.IOException: Logon failure: 
unknown user name or bad password. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.Directory.InternalGetFileDirectoryNames(String path, 
String userPathOriginal, String searchPattern, Boolean includeFiles, 
Boolean includeDirs, SearchOption searchOption) 
at System.IO.Directory.GetDirectories(String path, String searchPattern, 
SearchOption searchOption) 

làm việc này

Library.Class obj =new Library.Class(); 
    obj.Execute(serverPath); 

này không làm việc

Assembly assembly = Assembly.LoadFile(@"pathTo\Library.dll"); 
    Type type = assembly.GetType("Library.Class"); 
    MethodInfo executeMethod = type.GetMethod("Execute"); 
    object classInstance = Activator.CreateInstance(type, null); 
    object[] parameterArray = new object[] { serverPath}; 
    executeMethod.Invoke(classInstance, parameterArray); 

đâu Library.Class.execute được định nghĩa là

public void Execute(string serverPath){ 
    string[] directories = Directory.GetDirectories(serverPath, 
          "1.*", SearchOption.TopDirectoryOnly); 
    foreach (var directory in directories) { 
     Console.WriteLine(directory);  
    } 
} 

serverPath là một mạng chia sẻ rằng requi đỏ người dùng nhập thông tin đăng nhập.

----- Cập nhật 1 -------

Điều này dường như hơi môi trường - Tôi có ít nhất một máy tính thử nghiệm, nơi mọi thứ hoạt động. Tôi sẽ thực hiện một số thử nghiệm khác để xác định sự khác biệt quan trọng.

+1

'LoadFrom' (thay vì' LoadFile') có hoạt động khác không? –

+2

http://msdn.microsoft.com/en-us/library/b61s44e8.aspx 'LoadFile không tải tệp vào ngữ cảnh LoadFrom và không giải quyết các phụ thuộc bằng cách sử dụng đường dẫn tải, vì phương thức LoadFrom không' –

+0

Đó là thông tin hữu ích, nhưng tôi không nghĩ rằng vấn đề phải làm với 'LoadFrom' vs' LoadFile' vì trong mã thực tế, Library.dll nằm trong cùng thư mục với ứng dụng thực thi. Ngoài ra, vấn đề đã dừng lại một cách bí ẩn ngày hôm nay. –

Trả lời

0

này dường như đã được một số. loại vấn đề môi trường. Chúng tôi đã không thể tái tạo sự cố kể từ khi máy thử nghiệm được khởi động lại.

0

Bạn có thể muốn thử để có được những thư mục hiện hành:

AppDomain.CurrentDomain.BaseDirectory

System.Reflection.Assembly.GetExecutingAssembly() Địa điểm

+0

Mẫu của tôi không rõ ràng - thư mục được kiểm tra không phải là thư mục hiện tại, mà là một mạng chia sẻ hoàn toàn đủ điều kiện, ví dụ: \\ máy \ share $ \ dir. –

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