Win32Exception:目录名无效

我正在尝试以不同的用户身份运行一个进程,该用户在运行Vista并启用了UAC的2台不同计算机上具有管理员权限但在其中一个用户中我收到一条说“目录名无效”的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); 

UPDATE

执行上述代码的应用程序具有requireAdministrator执行级别。 我甚至将工作文件夹设置为“Path.GetDirectoryName(myFile)”“New System.IO.FileInfo(myFile).DirectoryName”

您需要指定ProcessStartInfo`的WorkingDirectory属性。 从Win32Exception错误代码267“目录名称无效” :

我目前正在开发一个“自动运行为”工具。 它的目标是帮助管理员,像我一样,必须为用户提供以管理员身份执行一个或两个程序的方法,并希望这样做而不必放弃管理员的密码。

所以,我正在开发Vista,我刚刚发布了一个小概念certificate原型,即使用ProcessStartInfo和Process将calc.exe作为不同的用户运行。 当我像我一样执行它时这很好用(我必须承认这是一个相当无意义的练习),但是当我创建一个新用户并试图像他一样运行它时,我偶然发现Win32Exception抱怨目录名无效,本机错误代码267.我当时感到困惑,因为我知道没有提供的目录名可能无效。 然后我在XP机器上测试了代码并且它工作了!

我开始搜索它无济于事,许多关于该错误的报告但没有确凿的解决方案,或在不同的背景下。 最后,经过一段时间我突然意识到,我没有指定ProcessStartInfo类的WorkingDirectory属性,只要我添加了这些行

FileInfo fileInfo = new FileInfo(path); startInfo.WorkingDirectory = fileInfo.DirectoryName;

对于我的代码,允许运行代码与登录用户不同。 …

尝试更换

 pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName; 

 pInfo.WorkingDirectory = Path.GetDirectoryName(myFile); 

FileInfo访问文件系统,我假设只有admin用户可以访问该目录。 如果它不能解决您的问题,至少它会使您的代码更快一点……

目录是登录用户的映射主文件夹还是低于该目录? 这篇知识库文章可能有所帮助:

使用Windows中的“运行方式”function启动Cmd.exe或Notepad.exe时“目录名无效”错误消息

更新:请注意,作为本地管理员组的成员并具有管理权限在Vista上是不同的。

我认为当您以管理员身份运行C#应用程序时,一切正常。 右键单击可执行文件,然后选择以管理员身份运行 ,或从提升的命令提示符启动应用程序(获取一个应用程序的最快方法是按Start ,输入’cmd’,然后按Ctrl+Shift+Return )。

或者,作为替代方法,为运行该进程的帐户禁用UAC。

这是因为文件的路径长度超过255个字符。

这是由于文件夹名称中的空格。 一旦我删除了空间,当我遇到这个问题时它就开始工作了。

我有类似的经历,结果certificate我们的开发环境存在问题。 我们使用subst命令将源代码目录映射到虚拟驱动器。 因此,FileName和WorkingDirectory属性被设置为“W:\ SomeFolder \ FileName.exe”

当我硬编码FileName和WorkingDirectory以通过我的实际磁盘(C :)访问文件时,我停止接收“无效目录”exception。