2011-10-20 14 views
10

Bir ağ paylaşımına erişen bir yöntemimiz var. Bu yöntem doğrudan çağrıldığında iyi çalışır, ancak reflecton ile çağrıldığında System.IO.IOException alırız. Kullanıcı bağlamının yansıyan kod için mevcut olmadığı anlaşılmaktadır (aşağıdaki yığın izlemesine bakınız). Bunu önlemek için bir yol var mı?Yansıtılan yöntem çağrılarında ağ paylaşımlarına erişme

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) 

bu

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

bu Library.Class.execute

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

ve serverPath olarak tanımlanır

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); 

çalışmaz çalışan bir ağ paylaşımı olduğunu requi kırmızı kullanıcı kimlik bilgilerini girin.

----- Güncelleme 1 -------

Bu biraz çevre gibi görünüyor - her şey çalışıyor nerede en az bir test makinesi var. Hangi farkların önemli olduğunu belirlemek için daha fazla test yapacağım.

+1

'LoadFrom' (' LoadFile' yerine) farklı davranıyor mu? –

+2

http://msdn.microsoft.com/en-us/library/b61s44e8.aspx 'LoadFile, LoadFrom bağlamına dosya yüklemez ve LoadFrom yöntemi ' –

+0

' olduğu gibi yük yolunu kullanarak bağımlılıkları çözmez. Yararlı bilgiler, ancak asıl koddan bu yana 'LoadFrom' vs' LoadFile' ile ilgili sorun olduğunu düşünmüyorum, Library.dll uygulaması yürütme ile aynı klasörde. Ayrıca, sorun bugün gizemli bir şekilde durdu. –

cevap

0

Bu, bazı olmuştur görünüyor. Bir tür çevre kirliliği sorunu. Test makinesi yeniden başlatıldığından bu sorunu yeniden üretemedik.

0

Geçerli dizini elde etmek için bu denemek isteyebilirsiniz:

AppDomain.CurrentDomain.BaseDirectory

System.Reflection.Assembly.GetExecutingAssembly() Yer

+0

Örneğim net değildi - incelenen dizin geçerli dizin değil, tam nitelikli bir ağ paylaşımı, ör. \\ makine \ share $ \ dir. –

İlgili konular