实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能

这篇具有很好参考价值的文章主要介绍了实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


本文实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能。

以挂载vhd虚拟盘、卸载vhd虚拟盘为例。

一、挂载vhd虚拟盘
C#工程 vhdAttach, 生成vhdAttach.exe,vhdAttach.exe的功能为:启动windows终端cmd.exe,读取attach-vhd.txt中的内容,并在终端里执行attach-vhd.txt中的多条指令。
注意:要设置vhdAttach.exe的权限(右键点击vhdAttach.exe,属性,兼容性,勾选"以管理员身份运行此程序")。
attach-vhd.txt的内容如下:
/K runas /savecred /user:administrator cmd
diskpart
select vdisk file="E:\1.vhd"
attach vdisk
exit
工程使用的参数在App.config里可配置,配置参数如下:
     <appSettings>
        <add key="filePath" value="D:/attach-vhd.txt"/>
        <add key="processName" value="vhdAttach"/>
        <add key="waitTime" value="3000"/>
    </appSettings>

以管理员权限运行vhdAttach.exe的命令,第一次运行时提示输入管理员密码,之后不必再输入:runas /user:administrator /savecred vhdAttach
执行效果,挂载vhd虚拟盘(注意vhd虚拟盘的路径,vhd虚拟盘的初始化见相关教程)。

vhdAttach工程的主要代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;
using System.IO;
using System.Threading;

namespace vhdAttach
{
    class Program
    {

        //private static string CmdPath = @"C:\Windows\System32\cmd.exe";
        private static string CmdPath = "cmd.exe";
        /// <summary>
        /// 执行cmd命令 返回cmd窗口显示的信息
        /// 多命令请使用批处理命令连接符:
        /// <![CDATA[
        /// &:同时执行两个命令
        /// |:将上一个命令的输出,作为下一个命令的输入
        /// &&:当&&前的命令成功时,才执行&&后的命令
        /// ||:当||前的命令失败时,才执行||后的命令]]>
        /// </summary>
        ///<param name="cmd">执行的命令</param>
        public static string RunCmd(string[] cmdList)  //List<string> cmdList
        {            
            using (Process p = new Process())
            {
                p.StartInfo.FileName = CmdPath;
                p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
                p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
                p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
                p.StartInfo.CreateNoWindow = true; //不显示程序窗口
                
                var pp = p.Start();//启动程序
                
                foreach(string cmdline in cmdList)
                {
                    p.StandardInput.WriteLine(cmdline);
                }

                p.StandardInput.AutoFlush = true;

                //获取cmd窗口的输出信息
                string output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();
                
                return output;
            }
        }
               
        static void Main(string[] args)
        {
            Action exit_delegate = killProcess;            
            exit_delegate.BeginInvoke(null,null);

            try
            {                
                string filePath = System.Configuration.ConfigurationSettings.AppSettings.Get("filePath");
                
                string[] paramList = File.ReadAllLines(filePath);
                                
                string put = RunCmd(paramList);    //执行命令                
                Console.WriteLine(put);        //控制台输出返回结果

            }
            catch(Exception ex)
            {

            }

        }

        static void killProcess()
        {            
            string waitTimeStr = System.Configuration.ConfigurationSettings.AppSettings.Get("waitTime");
            int waitTime = int.Parse(waitTimeStr);

            try
            {
                Thread.Sleep(waitTime);
            }
            catch (Exception ex)
            {

            }
            
            string processName = System.Configuration.ConfigurationSettings.AppSettings.Get("processName");

            Process[] pros = Process.GetProcessesByName(processName);

            foreach (Process p in pros)
            {
                p.Kill();
            }
        }

    }
}文章来源地址https://www.toymoban.com/news/detail-494725.html


二、卸载vhd虚拟盘
C#工程 vhdDetach, 生成vhdDetach.exe,vhdDetach.exe的功能为:启动windows终端cmd.exe,读取detach-vhd.txt中的内容,并在终端里执行detach-vhd.txt中的多条指令。
注意:要设置vhdDetach.exe的权限(右键点击vhdDetach.exe,属性,兼容性,勾选"以管理员身份运行此程序")
detach-vhd.txt的内容如下:
/K runas /savecred /user:administrator cmd
diskpart
select vdisk file="E:\1.vhd"
detach vdisk
exit
工程使用的参数在App.config里可配置,配置参数如下:
     <appSettings>
        <add key="filePath" value="D:/detach-vhd.txt"/>
        <add key="processName" value="vhdDetach"/>
        <add key="waitTime" value="3000"/>
    </appSettings>

以管理员权限运行vhdDetach.exe的命令,第一次运行时提示输入管理员密码,之后不必再输入:runas /user:administrator /savecred vhdDetach
执行效果,卸载vhd虚拟盘(注意vhd虚拟盘的路径,vhd虚拟盘的初始化见相关教程)。

vhdDetach工程的主要代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;
using System.IO;
using System.Threading;

namespace vhdDetach
{
    class Program
    {
        //private static string CmdPath = @"C:\Windows\System32\cmd.exe";
        private static string CmdPath = "cmd.exe";
        /// <summary>
        /// 执行cmd命令 返回cmd窗口显示的信息
        /// 多命令请使用批处理命令连接符:
        /// <![CDATA[
        /// &:同时执行两个命令
        /// |:将上一个命令的输出,作为下一个命令的输入
        /// &&:当&&前的命令成功时,才执行&&后的命令
        /// ||:当||前的命令失败时,才执行||后的命令]]>
        /// </summary>
        ///<param name="cmd">执行的命令</param>
        public static string RunCmd(string[] cmdList)  //List<string> cmdList
        {
            //cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
            using (Process p = new Process())
            {
                p.StartInfo.FileName = CmdPath;
                p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
                p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
                p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
                p.StartInfo.CreateNoWindow = true; //不显示程序窗口

                var pp = p.Start();//启动程序

                //向cmd窗口写入命令
                
                foreach (string cmdline in cmdList)
                {
                    p.StandardInput.WriteLine(cmdline);
                }

                p.StandardInput.AutoFlush = true;

                //获取cmd窗口的输出信息
                string output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();

                return output;
            }
        }

        static void Main(string[] args)
        {
            Action exit_delegate = killProcess;
            exit_delegate.BeginInvoke(null, null);

            try
            {                
                string filePath = System.Configuration.ConfigurationSettings.AppSettings.Get("filePath");

                string[] paramList = File.ReadAllLines(filePath);
                string put = RunCmd(paramList);    //执行命令                
                Console.WriteLine(put);        //控制台输出返回结果
            }
            catch (Exception ex)
            {

            }

        }

        static void killProcess()
        {            
            string waitTimeStr = System.Configuration.ConfigurationSettings.AppSettings.Get("waitTime");
            int waitTime = int.Parse(waitTimeStr);

            try
            {
                Thread.Sleep(waitTime);  //
            }
            catch (Exception ex)
            {

            }
            
            string processName = System.Configuration.ConfigurationSettings.AppSettings.Get("processName");

            Process[] pros = Process.GetProcessesByName(processName);

            foreach (Process p in pros)
            {
                p.Kill();
            }
        }

    }
}

到了这里,关于实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Win11/Windows11设置始终以管理员身份运行cmd窗口

    在使用Windows进行开发时,我们经常需要使用管理员身份运行cmd窗口, 但是每次打开都需要右键\\\"以管理员身份运行\\\",比较浪费时间, 下面将介绍在Win11/Windows11系统中,设置始终以管理员身份运行cmd窗口!         在搜索栏输入终端,点击打开。         如下图所示:  

    2024年02月12日
    浏览(52)
  • windows脚本获取管理员权限修改host

    很多时候我们常常需要通过管理员权限执行脚本,脚本可能涉及到一些受保护信息的访问,我们写个简单的脚本来更改host文件,host文件就是需要管理员权限才能访问的启动脚本时先检查是否有管理员权限,如果没有就调用授权脚本进行管理员授权打开,给用户弹出需要管理

    2024年02月14日
    浏览(44)
  • 要在Internet Explorer 模式下打开此页面,请使用管理员权限重新安装 Microsoft Edge.

    windows 11 更新后 Edge 不能用 Internet Explorer 模式了,导致一些老网站插件无法使用。 创建 .reg 文件,内容如下 双击运行reg文件

    2024年02月11日
    浏览(163)
  • Windows开发:服务程序启动有管理员权限的界面程序

    本章介绍Windows桌面开发中,服务程序如何启动有管理员权限的界面进程。 在这种情况下,以下几点需要弄清楚: Windows的服务是什么 Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自

    2024年02月11日
    浏览(55)
  • 要在Internet Explorer模式下打开此页面,请使用管理员权限重新安装Microsoft Edge 问题解决

    首先就是使用管理员模式安装最新版的edge; 如果然提示这个,新建一个reg文件,内容如下: 直接执行就行, 如果没有解决问题,请检查ie浏览器是否可以正常打开,不能的话就需要重装ie了 。                                            

    2024年02月11日
    浏览(65)
  • Windows 开机启动脚本 (不询问自动以管理员权限运行bat)

    获取开机启动文件夹 之后将“你的.bat”文件放入“开机启动文件夹”内即可 快捷键Win+R,zhixing shell:startup 打开用户级的开机自启文件夹 或者cmd执行: 之后将“你的.bat”文件放入“开机启动文件夹”内即可 相关参考: Windows设置程序开机自启动的几种方法(整理发布) 使用

    2024年02月13日
    浏览(53)
  • windows10使用administrator登录后出现“无法使用内置管理员账户打开应用”的解决方法

    解决方法: 修改组注册表。   详细步骤: ​​​​​​1. 【Win】+【R】打开“运行页面”,输入:【regedit】进入注册表编辑器。 2. 依次打开: 【HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPolicies System】,在右侧找到【FilterAdministratorToken】,双击后将数值数据改为【1】

    2024年02月12日
    浏览(92)
  • C#实现软件开机自启动(不需要管理员权限)

    目录 原理简介 使用方法 完整代码 本文参考C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法,将里面中的第一种方法做了封装成 AutoStart 类,使用时直接两三行代码就可以搞定。 自启动的原理是 将软件的快捷方式创建到计算机的自动启动目录下(不需要管理员权限)

    2024年02月11日
    浏览(55)
  • WinForm实现管理员权限运行的三种方式

    来源:https://mp.weixin.qq.com/s/ydBWABy7kwOWxNCQu4qYMA   在visual studio开发winform程序,生成msi安装包以后,代码运行似乎没有问题。但是,若是软件安装到了C盘,软件在执行某些操作,比如写文件、读文件等操作时,有可能会因为操作系统用户权限不足导致读写不成功。关键这时候软

    2024年02月04日
    浏览(52)
  • Python 实现程序自动以管理员权限运行的方法

    由于Windows的安全机制,Python写的脚本缺少了管理员权限,运行就会受到一些限制。 文章介绍Python 脚本自动以管理员权限运行的方法, 也就是如果脚本不是以管理员运行,就自动提升到管理员权限。 将python提升到管理员权限运行需要调用 ShellExecute 这个API函数。 ShellExecute 函

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包