C# 启动提升的进程时,目录无效或找不到指定的文件

C# 启动提升的进程时,目录无效或找不到指定的文件,c#,process,directory,C#,Process,Directory,我以普通用户的身份启动了我的应用程序,但有时我需要启动一个提升的进程来启动另一个应用程序。另一个已启动的应用程序位于名为Executables的子文件夹中。所有用户都可以完全访问当前目录和子目录中的文件 我正在使用的代码: public bool CreateElevatedProcess(ActionData data, bool log) { if (!string.IsNullOrEmpty(data.Arguments) && Normal

我以普通用户的身份启动了我的应用程序,但有时我需要启动一个提升的进程来启动另一个应用程序。另一个已启动的应用程序位于名为Executables的子文件夹中。所有用户都可以完全访问当前目录和子目录中的文件

我正在使用的代码:

    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,并显示以下错误消息:目录名无效。