Win32Exception:目录名无效

时间:2009-06-13 11:50:46

标签: c# processstartinfo 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);

更新

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

6 个答案:

答案 0 :(得分:13)

您需要指定ProcessStartInfo`的WorkingDirectory属性。来自Win32Exception error code 267 "The directory name is invalid"

  

我目前正致力于" Automated Run As"工具。它的目标是   帮助管理员,像我一样,必须为用户提供执行方式   一个或两个程序作为管理员,并希望没有   不得不放弃管理员的密码。

     

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

     

我开始谷歌上搜索无济于事,但很多报道都有这个错误   没有决定性的解决方案,或在不同的背景下。最后,经过一个   虽然我突然意识到,但我还没有指定WorkingDirectory   ProcessStartInfo类的属性,只要我添加了行

     

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

     

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

答案 1 :(得分:3)

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

  

"The directory name is invalid" error message when you start Cmd.exe or Notepad.exe by using the Run as feature in Windows

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

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

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

答案 2 :(得分:3)

尝试替换

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

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

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

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