mrt*_*ndi 13 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);
Run Code Online (Sandbox Code Playgroud)
UPDATE
执行上述代码的应用程序具有requireAdministrator执行级别.我甚至将工作文件夹设置为"Path.GetDirectoryName(myFile)"和"New System.IO.FileInfo(myFile).DirectoryName"
小智 13
您需要指定WorkingDirectoryProcessStartInfo` 的属性.从Win32Exception错误代码267"目录名称无效":
我目前正在开发一个"自动运行为"工具.它的目标是帮助管理员,像我一样,必须为用户提供以管理员身份执行一个或两个程序的方法,并且希望这样做而不必放弃管理员的密码.
所以,我正在开发Vista,我刚刚发布了一个小概念证明原型,它使用ProcessStartInfo和Process将calc.exe作为不同的用户运行.当我像我一样执行它时这很好用(我必须承认这是一个相当无意义的练习),但是当我创建一个新用户并试图像他一样运行它时,我偶然发现Win32Exception抱怨目录名无效,本机错误代码267.我当时感到困惑,因为我知道没有提供的目录名可能无效.然后我在XP机器上测试了代码并且它工作了!
我开始搜索它无济于事,许多关于该错误的报告但没有确定的解决方案,或在不同的背景下.最后,经过一段时间我突然意识到,我没有指定ProcessStartInfo类的WorkingDirectory属性,只要我添加了这些行
FileInfo fileInfo = new FileInfo(path); startInfo.WorkingDirectory = fileInfo.DirectoryName;
对于我的代码,允许运行代码与登录用户不同....
这是因为文件的路径长度超过了 255 个字符。
| 归档时间: |
|
| 查看次数: |
32158 次 |
| 最近记录: |