他のプロジェクトが互いのDドライブを訪問するローカル管理者のアクセスを必要があり、インターネットはあなたが1903にアップグレードする失敗した場合に、一定期間の始まりを使用することができ、いくつかのAPIを見つけ、ああを強制するために無知な外観にします
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.Linqのを。 使用してSystem.Textのを。 使用してSystem.Runtime.InteropServicesを。 名前空間ConsoleApplication5 { パブリック クラスSharedTool:IDisposableを { //がユーザトークンを取得 [DLLIMPORT(" のAdvapi32.dll "、SetLastError = 真)] 静的 にextern BOOLのLogonUser(文字列 pszUsername、文字列 pszDomain、文字列をpszPassword、 int型 dwLogonType、int型 dwLogonProvider、REF のIntPtr phToken)。 //はLogonUser関数によって返されたオープンhandes閉じ [DLLIMPORT(" KERNEL32.DLL "、項目CharSet = CharSet.Auto)] のextern 静的 ブールCloseHandleを(のIntPtrハンドル)。 [DLLIMPORT(" ADVAPI32.DLL " )] 静的 にexternの ブールImpersonateLoggedOnUser(のIntPtr hToken)。 [DLLIMPORT(" ADVAPI32.DLL " )] スタティック EXTERN BOOL にRevertToSelf(); const int型 LOGON32_PROVIDER_DEFAULT = 0 ; const int型 LOGON32_LOGON_NEWCREDENTIALS = 9 ; // 域控中的需要用:インタラクティブ= 2 プライベート BOOL 配置されました。 公共 SharedTool(文字列名、文字列のパスワード、文字列IP) { // トークンを初期化する のIntPtr pExistingTokenHandle = 新しいのIntPtr(0 ); IntPtr pDuplicateTokenHandle =新しいのIntPtr(0 ); 試す { // トークンにハンドルを取得 BOOL bImpersonated = のLogonUser(ユーザー名、IP、パスワード、 LOGON32_LOGON_NEWCREDENTIALS、LOGON32_PROVIDER_DEFAULT、REF pExistingTokenHandleを)。 もし(bImpersonated) { 場合(!ImpersonateLoggedOnUser(pExistingTokenHandle)) { int型 nErrorCode = Marshal.GetLastWin32Error(); スロー 新しい例外(「ImpersonateLoggedOnUserエラー;コード= 」+ nErrorCode)。 } } 他 { INT nErrorCode = Marshal.GetLastWin32Error()。 スロー 新しい例外(" LogonUserのエラーを;コード= " + nErrorCode)。 } } 最後に { // 近いハンドル(S) であれば(pExistingTokenHandle =!IntPtr.Zero) CloseHandleを(pExistingTokenHandle)。 もし pDuplicateTokenHandle(!= IntPtr.Zero) CloseHandleを(pDuplicateTokenHandle)。 } } 保護された 仮想 ボイド(廃棄ブール配置を) { 場合(!配置) { にRevertToSelf(); 配置された = 真; } } 公共 ボイド廃棄() { (廃棄真)。 } } } 案例: 使用システム。 使用してSystem.Collections.Generic; 使用してSystem.Linqのを。 使用してSystem.Textのを。 使用してSystem.IOを。 名前空間ConsoleApplication5 { クラスプログラム { 静的な 無効メイン(文字列[] argsを) { 使用して(SharedToolツール= 新 SharedTool(" 管理者"、" 12345678 "、" 192.168.1.101 " )) { 文字列 selectPath = @」\\ 192.168.1.101 \ Cの$" ; VAR dicInfo = 新しい DirectoryInfo(selectPath); // 选择的目录信息 DirectoryInfo [] DIC =のdicInfo.GetDirectories(" *。* 」、SearchOption.TopDirectoryOnly); foreachの(DirectoryInfoの温度におけるDIC) { Console.WriteLineを(TEMP .FullName); } Console.WriteLineを(" -------------------------- " ); のFileInfo []テキストファイルの =のdicInfo.GetFiles(" *。* "、SearchOption.TopDirectoryOnly); // 含むディレクトリのサブディレクトリの下にあるすべてのファイルを取得 するforeach(のFileInfo TEMP にテキストファイル) { Console.WriteLineを(temp.Name); } } Console.ReadKeyを(); } } }