【问题标题】:External program execution impersonation mode外部程序执行模拟模式
【发布时间】:2016-08-19 02:20:40
【问题描述】:

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

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

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

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

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 程序
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 上下文中可用。

我的意思是:我可以让一个映射网络驱动器只对作为模拟用户执行的程序可用,而不是对当前登录的 Windows 用户可用吗?

【问题讨论】:

  • 您是否验证了相关帐户对目标文件夹具有读取和执行权限,而不仅仅是读取权限?另外,您使用的是哪个版本的 .Net 框架?
  • 是的,罗伯特。该帐户具有完全的读写权限。框架版本为 4。
  • 如果可执行文件存储在本地,程序是否可以工作?另外,当你尝试这个时会发生什么:ExternalProcess.StartInfo.FileName = @"\\x.x.x.x\folderx\subfolder\APP\app.exe"
  • 是的,如果可执行文件存储在本地,它就可以工作。
  • 我也尝试了你的建议,但抛出了同样的异常。

标签: c# .net impersonation


【解决方案1】:

您可能需要确保网络位置是可信的:

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

根据您的情况,在本地计算机上缓存可执行文件可能是最佳选择,因为它不太容易受到网络中断的影响,而且您不必担心在程序执行时会发生变化。

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多