У нас есть метод доступа к общему сетевому ресурсу. Этот метод отлично работает, когда вызывается напрямую, но мы получаем исключение System.IO.IOException, когда он вызывается с помощью рефлекона. Похоже, что пользовательский контекст не доступен для отраженного кода (см. Трассировку стека ниже). Есть ли способ предотвратить это?
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)
это работает
Library.Class obj =new Library.Class();
obj.Execute(serverPath);
это не работает
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);
Где Library.Class.execute определяется как
public void Execute(string serverPath){
string[] directories = Directory.GetDirectories(serverPath,
"1.*", SearchOption.TopDirectoryOnly);
foreach (var directory in directories) {
Console.WriteLine(directory);
}
}
и serverPath
- это общий сетевой ресурс, который требовал от пользователя ввода учетных данных.
----- Обновление 1 -------
Кажется, это несколько экологично - у меня есть хотя бы одна тестовая машина, на которой все работает. Я проведу еще несколько тестов, чтобы определить, какие различия имеют значение.