示例#1
0
        public AppParamFrm(CommanderData cmdObj)
        {
            InitializeComponent();
            GlobalVar.Instanse.Init();

            SetInfo(cmdObj);
        }
示例#2
0
        /// <summary>
        /// 调用命令.
        /// </summary>
        /// <param name="cmdObj">The CMD obj.</param>
        public static void Execute(CommanderData cmdObj)
        {
            StringCollection scBefore, scAfter;
            ParseBACmd(cmdObj.ExtCmds, out scBefore, out scAfter);

            //查找系统环境变量或直接打开文件夹
            if (scBefore.Contains(cmdObj.Cmd) || scAfter.Contains(cmdObj.Cmd))
            {
                throw new ExtCommandLineBrokenException("扩展命令集不能包含自身");
            }
            try
            {
                //前执行
                foreach (string bCmd in scBefore)
                    MatchForInvoke(bCmd, cmdObj);

                Run(cmdObj.ParsedCmd, cmdObj.Args);

                //后执行
                foreach (string aCmd in scAfter)
                    MatchForInvoke(aCmd, cmdObj);
            }
            catch (ExtCommandLineBrokenException)
            {
            }
        }
示例#3
0
        /// <summary>
        /// 根据shortcut查找程序.
        /// 传进来的shortcut应该通过Trim,否则不能正常解析
        /// 开启新线程解析命令并运行
        /// </summary>
        /// <param name="shortcut">The shortcut.</param>
        /// <param name="bPassParse">if set to <c>true</c> 直接运行,不进行解析.</param>
        public static void FindToRun(string shortcut,bool bRunDirectly)
        {
            CommanderData cmdObj = new CommanderData();
            cmdObj.Cmd = shortcut;
            cmdObj.IsRunDirectly = bRunDirectly;

            System.Threading.ThreadPool.QueueUserWorkItem(StartFindThread, cmdObj);
        }
示例#4
0
        /// <summary>
        /// 直接执行护展命令
        /// </summary>
        /// <param name="sExtCmds">The s ext CMDS.</param>
        public static void ExecExtCmd(string sExtCmds, CommanderData Context)
        {
            StringCollection scBefore, scAfter;
            ParseBACmd(sExtCmds, out scBefore, out scAfter);
            //先执行
            foreach (string bCmd in scBefore)
                MatchForInvoke(bCmd, Context);

            //后执行
            foreach (string aCmd in scAfter)
                MatchForInvoke(aCmd, Context);
        }
示例#5
0
 private static void MatchForInvoke(string FullCmd, CommanderData Context)
 {
     m_invoker.Invoke(FullCmd, Context);
 }
示例#6
0
 //private bool FindCommand(out ConfigData cd)
 //{
 //    GlobalVar.Helper.AddSelect("programs", "");
 //    return true;
 //}
 /// <summary>
 /// 根据配置,解析用户输入的命令成为系统可识别的命令和参数.
 /// </summary>
 /// <param name="shortcut">用户输入的快捷命令.</param>
 /// <param name="cmd">系统可识别的命令.</param>
 /// <param name="args">参数.</param>
 private static void ParseCommand(string shortcut, CommanderData cmdObj)
 {
     string sCmd;
     string sArgs;
     string sExtCmd;
     //获取命令和参数间隔的空格位置
     int iPos = GetParamPos(shortcut);
     if (iPos == -1)
     {
         sCmd = shortcut;
         sArgs = String.Empty;
         sExtCmd = String.Empty;
     }
     else
     {
         sCmd = shortcut.Substring(0, iPos);
         sArgs = shortcut.Substring(++iPos, shortcut.Length - iPos);
         int iIc = sArgs.IndexOf(INNERSTART);
         if (iIc != -1)
         {
             sExtCmd = ParseExtCmd(sArgs.Substring(iIc).Trim());
             sArgs = sArgs.Substring(0, iIc);
         }
         else
             sExtCmd = String.Empty;
     }
     //构造命令对象
     cmdObj.Args += " " + sArgs;//用 += 是因为参数可能来自用户输入和配置
     cmdObj.ParsedCmd = sCmd;
     cmdObj.ExtCmds = sExtCmd;
 }
示例#7
0
 private void SetInfo(CommanderData obj)
 {
     groupBox.Text = "命令:" + obj.Cmd;
 }
示例#8
0
        public void ParseCommandTest()
        {
            string shortcut = string.Empty; // TODO: 初始化为适当的值
            CommanderData cmdObj = new CommanderData();
            //测试单个快捷命令
            shortcut = "cmd";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>("cmd", cmdObj.ParsedCmd);
            Assert.AreEqual<string>(string.Empty, cmdObj.Args.Trim().Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试单个完整路径,带空格路径情况已经包含普通情况(不带空格)
            shortcut = @"C:\Windows\program files\Commander.exe";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>(@"C:\Windows\program files\Commander.exe", cmdObj.ParsedCmd);
            Assert.AreEqual<string>(string.Empty, cmdObj.Args.Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试带参数命令
            shortcut = "cmd args";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>("cmd", cmdObj.ParsedCmd);
            Assert.AreEqual<string>("args", cmdObj.Args.Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试带参数带空格完整路径
            shortcut = @"C:\Windows\program files\Commander.exe args";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>(@"C:\Windows\program files\Commander.exe", cmdObj.ParsedCmd);
            Assert.AreEqual<string>("args", cmdObj.Args.Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试URL
            shortcut = "http://www.Commander.com";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>("http://www.Commander.com", cmdObj.ParsedCmd);
            Assert.AreEqual<string>(string.Empty, cmdObj.Args.Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试FTP路径
            shortcut = "\\88.88.88.88";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>("\\88.88.88.88", cmdObj.ParsedCmd);
            Assert.AreEqual<string>(string.Empty, cmdObj.Args.Trim());
            Assert.AreEqual<string>(string.Empty, cmdObj.ExtCmds);
            Cleer(cmdObj);

            //测试内部命令(内部命令只能出现在配置中,不能由用户在运行窗口输入)
            shortcut = @"C:\windows\program files\Commander.exe args{+$check| +before| after}";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>(@"C:\windows\program files\Commander.exe", cmdObj.ParsedCmd);
            Assert.AreEqual<string>("args", cmdObj.Args.Trim());
            Assert.AreEqual<string>("+$check| +before| after", cmdObj.ExtCmds);

            Cleer(cmdObj);

            //测试内部命令 无参数,命令前后可以有空格
            shortcut = @"C:\windows\program files\Commander.exe {+   $check| +before  | after}";
            ProgFinder_Accessor.ParseCommand(shortcut, cmdObj);
            Assert.AreEqual<string>(@"C:\windows\program files\Commander.exe", cmdObj.ParsedCmd);
            Assert.AreEqual<string>(string.Empty, cmdObj.Args.Trim());
            Assert.AreEqual<string>("+   $check| +before  | after", cmdObj.ExtCmds);
            Cleer(cmdObj);
        }
示例#9
0
 //
 //编写测试时,还可使用以下属性:
 //
 //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
 //[ClassInitialize()]
 //public static void MyClassInitialize(TestContext testContext)
 //{
 //    M_cmdObj = new CommanderData();
 //}
 //
 //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
 //[ClassCleanup()]
 //public static void MyClassCleanup()
 //{
 //}
 private void Cleer(CommanderData cmdObj)
 {
     cmdObj.Args = string.Empty;
     cmdObj.ParsedCmd = string.Empty;
     cmdObj.ExtCmds = string.Empty;
 }