在c#中以管理员身份运行shell命令(manage-bde)

本文关键字:命令 shell manage-bde 运行 身份 管理员 | 更新日期: 2023-09-27 18:14:20

我需要从c#代码中运行"manage-bde" shell命令。

主应用程序进程已经以管理员身份运行,并且处于Elevated状态。

我使用的代码来自:MS网站上的UAC自提升示例,用于确认应用程序进程被提升。(http://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation - 644673 - d3)

然而,当我尝试从c#代码运行manage-bde时,我得到"系统找不到指定的文件"。

        Process p = new Process();
        p.StartInfo.FileName = "C:''Windows''System32''manage-bde.exe";
        p.StartInfo.UseShellExecute = true;
        p.Start();

作为解决方法,我尝试创建一个运行命令的批处理文件。

        string batchFileName = DateTime.Now.Ticks + ".bat";
        StreamWriter writer = new StreamWriter(batchFileName);
        writer.WriteLine("manage-bde");
        writer.Flush();
        writer.Close();               
        Process p = new Process();
        p.StartInfo.FileName = batchFileName;               
        p.StartInfo.UseShellExecute = true;                             
        p.Start();

批处理文件写入,并成功执行;但是,无法识别"manage-bde"命令。

我更改了代码,使用动词"runas"并使用管理密码,这是有效的,但我希望批处理文件工作,而不需要提供管理密码。当前登录的用户已经是计算机上的管理员,但是没有使用现有的管理权限执行批处理文件。我需要批处理文件来执行和管理bde成功运行。

非常感谢您的帮助或建议:)

在c#中以管理员身份运行shell命令(manage-bde)

我遇到的行为的原因是Windows文件系统重定向器。

在大多数情况下,当32位应用程序试图访问%windir%'System32时,访问被重定向到%windir%'SysWOW64

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx

我的应用程序是32位的。每当它试图访问System32时,windows自动将其重定向到不包含"manage-bde.exe"的SysWow64。我将构建更改为64位,然后应用程序可以从System32

访问manage-bde.exe。

即使您以Administrator用户身份运行,如果UAC正在运行,您也没有完全提升。这意味着您将出现UAC提示符,或者提示您输入密码。

你唯一能解决这个问题的方法是先运行你的应用程序,或者写一个服务,让它以更高的权限运行,以启动你的新进程。

另一种选择当然是禁用UAC,但这在大多数情况下是不可取的。