我试图以不同用户的身份运行一个进程,在两台运行Vista并启用了UAC的不同计算机上具有管理员权限,但在其中一台计算机中,我得到了一个Win32Exception,它显示“目录名无效”
有人能告诉我我的代码出了什么问题吗?
var myFile = "D:\\SomeFolder\\MyExecutable.exe";
var workingFolder = "D:\\SomeFolder";
var pInfo = new System.Diagnostics.ProcessStartInfo();
pInfo.FileName = myFile;
pInfo.WorkingDirectory = workingFolder;
pInfo.Arguments = myArgs;
pInfo.LoadUserProfile = true;
pInfo.UseShellExecute = false;
pInfo.UserName = {UserAccount};
pInfo.Password = {SecureStringPassword};
pInfo.Domain = ".";
System.Diagnostics.Process.Start(pInfo);更新
执行上述代码的应用程序具有requireAdministrator执行级别。我甚至将工作文件夹设置为"Path.GetDirectoryName(myFile)"和"New System.IO.FileInfo(myFile).DirectoryName"“
发布于 2010-04-12 12:20:11
这是因为文件的路径长度超过255个字符。
发布于 2014-08-01 04:41:11
您需要指定ProcessStartInfo` `的WorkingDirectory属性。来自Win32Exception错误代码267“目录名无效”
我目前正在开发一个“自动运行作为”工具。它的目标是帮助管理员,像我一样,这些管理员必须给用户一个或两个作为管理员执行程序的方法,并且希望这样做,而不必交出管理员的密码。 所以,我在Vista上开发,我只是拿出了一个概念原型的小证明,使用ProcessStartInfo和Process将ProcessStartInfo作为一个不同的用户运行。当我以自己的身份执行它(我必须承认,这是一个毫无意义的练习)时,这很好,但是当我创建了一个新用户并试图以他的身份运行它时,我偶然发现了一个Win32Exception,抱怨目录名无效,本机错误代码267。我一时不知所措,因为我知道没有提供的目录名可能无效。然后我在一台XP机器上测试了代码,它成功了! 我开始在谷歌上搜索,很多错误的报告都没有结果,但是没有决定性的解决方案,或者在不同的情况下。最后,过了一段时间,当我添加行时,我没有指定ProcessStartInfo类的ProcessStartInfo属性。 FileInfo fileInfo =新FileInfo(路径);startInfo.WorkingDirectory = fileInfo.DirectoryName; 对于我的代码,它允许运行与登录用户不同的代码。..。
发布于 2009-06-13 13:16:44
试着取代
pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName;使用
pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);FileInfo对文件系统进行访问,我假设只有管理员用户才能访问该目录。如果它不能解决您的问题,至少它会使您的代码稍微快一点.
https://stackoverflow.com/questions/990562
复制相似问题