У нас есть метод, который обращается к сетевому ресурсу. Этот метод отлично работает при вызове напрямую, но мы получаем исключение 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 -------
Это кажется несколько экологичным - у меня есть хотя бы одна тестовая машина, где все работает. Я буду делать еще несколько тестов, чтобы определить, что имеет значение.