C# 启动提升的进程时,目录无效或找不到指定的文件
我以普通用户的身份启动了我的应用程序,但有时我需要启动一个提升的进程来启动另一个应用程序。另一个已启动的应用程序位于名为Executables的子文件夹中。所有用户都可以完全访问当前目录和子目录中的文件 我正在使用的代码:C# 启动提升的进程时,目录无效或找不到指定的文件,c#,process,directory,C#,Process,Directory,我以普通用户的身份启动了我的应用程序,但有时我需要启动一个提升的进程来启动另一个应用程序。另一个已启动的应用程序位于名为Executables的子文件夹中。所有用户都可以完全访问当前目录和子目录中的文件 我正在使用的代码: public bool CreateElevatedProcess(ActionData data, bool log) { if (!string.IsNullOrEmpty(data.Arguments) && Normal
public bool CreateElevatedProcess(ActionData data, bool log)
{
if (!string.IsNullOrEmpty(data.Arguments) && NormalUser.HasCredentials)
{
_proc = new Process
{
StartInfo =
{
Verb = "runas",
FileName = data.Filename,
//WorkingDirectory = data.File.DirectoryName,
Arguments = data.Arguments,
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UserName = NormalUser.Name,
Password = GetSecureString(NormalUser.Password),
Domain = NormalUser.Domain
}
};
return true;
}
return false;
}
private bool StartProcess()
{
if (_proc != null)
{
try
{
_proc.Start();
_proc.WaitForExit();
return true;
}
catch (Win32Exception ex)
{
// throws win32exception due to directory name is invalid or the specified file not found
}
}
return false;
}
我已尝试设置WorkingDirectory选项,但由于UseShellExecute设置为false,我不确定该选项是否有效
我所经历的:
当我在开发计算机上运行我的应用程序时,一切正常。我甚至将该文件夹复制到Visual Studio之外的C:\上的临时文件夹中,没有任何问题。但是,在另一台计算机上,我会遇到目录名无效或指定的文件未找到的错误。很可能这是一个用户权利问题,但是,所有用户都有完全访问权限
如何使用子目录中的文件正确启动提升进程
添加一个示例:
filename属性获取:Executables\rc.exe
参数属性获取:1 lester\mrburns
filename属性只获取子文件夹路径而不是完整路径,因为父路径可能会受到限制。如果不确定父路径可能会受到限制。这意味着父路径可能对非管理员用户有限制。假设您有一个分区U:它对用户是受限的。但是,用户可以访问U根目录上的子文件夹。限制的原因可能是为了避免用户看到U根目录上的所有内容:查找绕过遍历检查-只有疯狂的管理员才禁止将此应用于每个用户,这意味着唯一应用的权限检查是对文件本身的权限-如果他们可以运行该文件,他们可以运行该文件,并且不会执行回驱动器根目录的权限检查。我正在询问我的同事有关该设置的情况,希望我能从他们那里得到一些有用的答案:D,但本质上我可以通过filname属性访问文件,只需:Execute\rc.exe,而不是C:\Program Filesx86\\Executables\rc.exe?Process类不会对path?使用procmon进行任何不确定的测试。路径是正确的,但是我得到win32exception,并显示以下错误消息:目录名无效。