【发布时间】:2010-11-02 16:44:34
【问题描述】:
我正在尝试以具有管理员权限的不同用户身份运行进程,该用户在运行 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"
【问题讨论】:
-
错误出现在哪一行代码中?是在创建 FileInfo 对象时还是在启动进程时?
-
@divo System.Diagnostics.Process.Start(pInfo)
-
您可以使用进程监视器(来自 Sysinternals)来确定哪个底层 Win32 文件/文件夹操作失败。
-
顺便说一句,您可以使用字符串文字来避免在路径中转义斜杠,例如,
var myFile = @"D:\SomeFolder\MyExecutable.exe";。 -
如果您的 SomeFolder 路径包含 Program Files (x86) 文件夹,Visual Studio 或其他工具会神秘地删除 's' 和 '(' 之间的空格并将其设为“Program Files(x86)”。也许你错过了这个错字
标签: c# processstartinfo win32exception