【发布时间】:2016-08-19 02:20:40
【问题描述】:
我们有一个使用映射网络驱动器的旧版 CRM 系统(服务器)。问题是驱动器已完全打开以供任何用户修改。
我正在尝试在 c# .net 控制台应用程序(客户端 A)中使用用户模拟。
客户端 A 执行一个 .exe 程序(控制台应用程序),进行模拟(域、另一个用户、密码)。
然后控制台应用程序将网络文件夹映射到驱动器:
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);
- 然后,控制台应用程序尝试打开位于映射网络驱动器中的 .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()
文件夹共享属性将模拟中使用的用户设置为唯一可以读写的用户。
简而言之,我希望我的外部程序以模拟用户身份执行。
编辑
这是我真正想做的事情:
- Windows 用户登录域
- 用户打开一个模拟程序,将网络文件夹映射到驱动器,最后以模拟用户的身份调用 CRM 可执行文件,但是,网络驱动器必须仅在 CRM 上下文中可用。
我的意思是:我可以让一个映射网络驱动器只对作为模拟用户执行的程序可用,而不是对当前登录的 Windows 用户可用吗?
【问题讨论】:
-
您是否验证了相关帐户对目标文件夹具有读取和执行权限,而不仅仅是读取权限?另外,您使用的是哪个版本的 .Net 框架?
-
是的,罗伯特。该帐户具有完全的读写权限。框架版本为 4。
-
如果可执行文件存储在本地,程序是否可以工作?另外,当你尝试这个时会发生什么:ExternalProcess.StartInfo.FileName = @"\\x.x.x.x\folderx\subfolder\APP\app.exe"
-
是的,如果可执行文件存储在本地,它就可以工作。
-
我也尝试了你的建议,但抛出了同样的异常。
标签: c# .net impersonation