我们有一个使用映射网络驱动器的旧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);
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用户吗?
答案 0 :(得分:0)
您可能希望确保网络位置可信:
https://technet.microsoft.com/en-us/library/bb496428.aspx
根据您的具体情况,在本地计算机上缓存可执行文件可能是最佳选择,因为它不太容易受到网络中断的影响,您不必担心程序执行时从您下面发生的事情。< / p>