外部程序执行模拟模式

时间:2016-04-25 15:27:28

标签: c# .net impersonation

我们有一个使用映射网络驱动器的旧CRM系统(服务器)。问题是驱动器完全打开以供任何用户修改。

我试图在c#.net控制台应用程序(客户端A)中使用用户模拟。

  1. 客户端A执行.exe程序(控制台应用程序),进行模拟(域,其他用户,密码)。

  2. 然后控制台应用程序将网络文件夹映射到驱动器:

  3. 
        
        NETRESOURCE nr = new NETRESOURCE();
        nr.dwType = ResourceType.RESOURCETYPE_DISK;
        nr.lpLocalName = "X:";
        nr.lpRemoteName = @"\\x.x.x.x\folderx";
        nr.lpProvider = null;
    
        int result = WNetAddConnection2(nr, null, null, 0);
        
    
    
    1. 然后,控制台应用程序尝试打开位于映射网络驱动器中的.exe程序
    2. 
          
          Process ExternalProcess = new Process();
          ExternalProcess.StartInfo.FileName = @"X:\subfolder\APP\app.exe"; // Window application
          ExternalProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
          ExternalProcess.Start();
          ExternalProcess.WaitForExit();
          
      
      

      但是我得到了Win32Exception:

      
          
      
          Unknown error (0xfffffffe)
          in System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
          in System.Diagnostics.Process.Start()
          in SecureApp.Program.Main(String[] args) en \\vmware-host\Shared Folders\Documents\Visual Studio 2010\Projects\SecureApp\SecureApp\Program.cs:línea 142
          in System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
          in System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
          in Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
          in System.Threading.ThreadHelper.ThreadStart_Context(Object state)
          in System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
          in System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
          in System.Threading.ThreadHelper.ThreadStart()
          
      
      

      文件夹共享属性将模拟中使用的用户视为唯一可以阅读&写。

      简而言之,我希望我的外部程序可以作为模拟用户执行。

      修改

      这就是我真正想做的事情:

      1. Windows用户登录域
      2. 用户打开一个进行模拟的程序,将网络文件夹映射到驱动器,最后将CRM可执行文件称为模拟用户,但是,网络驱动器必须仅在CRM上下文中可用。
      3. 我的观点是:我可以将映射的网络驱动器仅用于作为模拟用户执行的程序,但不能用于当前登录的Windows用户吗?

1 个答案:

答案 0 :(得分:0)

您可能希望确保网络位置可信:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/e4a65263-24f9-45a6-a2ad-6c26aae36075/how-to-run-net-executable-on-a-network-drive?forum=clr

https://technet.microsoft.com/en-us/library/bb496428.aspx

根据您的具体情况,在本地计算机上缓存可执行文件可能是最佳选择,因为它不太容易受到网络中断的影响,您不必担心程序执行时从您下面发生的事情。< / p>