디렉토리가 로컬 네트워크가 아닌지 확인하려고합니다. stackoverflow 및 MSDN에 대한 연구가 끝나면, 나는 impersonate 메서드를 사용하여 코드를 개발합니다. 여기C# Directory.exist는 로컬 네트워크에서 항상 false를 반환합니다.
public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeTokenHandle()
: base(true)
{
}
[DllImport("kernel32.dll")]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool CloseHandle(IntPtr handle);
protected override bool ReleaseHandle()
{
return CloseHandle(handle);
}
}
class Environment
{
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
private void m_SendAlertes()
{
SafeTokenHandle safeTokenHandle;
string v_pathToDir = "\\192.168.1.199\Clients SiteInternet";
if (!LogonUser("RKalculateur", "SERVEUR2",
"riskedge", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle))
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
using (safeTokenHandle)
{
using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
{
using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
{
if (Directory.Exists(@v_pathToDir))
{
// Proceed code here
}
}
}
}
}
}
당신이이 디렉토리에 권리의 사진을 가지고 : 문제는 아주 잘 작동하지 않습니다는 Directory.exists()
방법은 항상 (이 거의 MSDN의 것과 동일합니다) 당신이 내 코드가 여기에 False
을 반환 :
wpf, win forms 또는 웹 앱입니까? –
그냥 C에서 정상적인 터미널 프로그램 # –
@ LukeMarlin 나는이 게시물을 이미 읽었지만 실제로 어떻게하는지 이해하지 못한다 : s ... 그리고 나는 IIS가 무엇인지 모른다. –