\t\tWeb启动客户端服务软件并完成登录动作

在asp.net页面中增加一个按钮调用一个JavaScript函数实现启动程序
javascript:Run('客户端服务软件.exe -u admin -p 4f5a51484e3c639b7c0e606511fe062d5f55aa0509638b385ed179e6d7fe4e9b7342f04c7c74b625574d6aa009693f386cef7b49536c3a4bfb5372675e76bb134f746a84466b7da86703');

<script type="text/javascript" language="JavaScript">
function Run(command)
    {           
        window.oldOnError = window.onerror;    
        window._command = command;    
        window.onerror = function (err){    
            if(err.indexOf('automation') != -1){    
                alert('命令已经被用户禁止!');    
                return true;    
            }
            else return false;
        };
        try
        {
            var wsh = new ActiveXObject('WScript.Shell');    
            if(wsh)wsh.Run(command);
            window.οnerrοr=window.oldOnError;
        }
        catch (e)
        {
            alert(‘找不到文件EDNMS-DE.EXE(或它的组件之一)。请确定路径和文件名是否正确,而且所需的库文件均可用。‘)   
        }
    }   
</script>

为了使得Web端的Js能够调用"客户端服务软件.exe" 的Winform程序,我们需要在安装Winform的时候,把安装路径加入到操作系统Path变量中,操作系统的Path变量的内容放置在注册表节点SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment的Path中.

处理命令行参数的公共类

using System;
using System.Collections.Generic;
using System.Text;

namespace WHC.EDNMS.Commons
{
    
public class CommandArgs
     {
         Dictionary
<string, string> mArgPairs = new Dictionary<string,string>();
        
public Dictionary<string, string> ArgPairs
         {
            
get { return mArgPairs; }
         }
    
        
public List<string> Params
         {
            
get { return mParams; }
         }
         List
<string> mParams = new List<string>();
     }

    
public class CommandLine
     {
        
/// <summary>
        
/// Parses the passed command line arguments and returns the result
        
/// in a CommandArgs object.
        
/// </summary>
        
/// The command line is assumed to be in the format:
        
///
        
///      CMD [param] [[-|--|\]&lt;arg&gt;[[=]&lt;value&gt;]] [param]
        
///
        
/// Basically, stand-alone parameters can appear anywhere on the command line.
        
/// Arguments are defined as key/value pairs. The argument key must begin
        
/// with a ‘-‘, ‘--‘, or ‘\‘.   Between the argument and the value must be at
        
/// least one space or a single ‘=‘.   Extra spaces are ignored.   Arguments MAY
        
/// be followed by a value or, if no value supplied, the string ‘true‘ is used.
        
/// You must enclose argument values in quotes if they contain a space, otherwise
        
/// they will not parse correctly.
        
///
        
/// Example command lines are:
        
///
        
/// cmd first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth
        
///
        
/// <param name="args">array of command line arguments</param>
        
/// <returns>CommandArgs object containing the parsed command line</returns>
        public static CommandArgs Parse(string[] args)
         {
            
char[] kEqual = new char[] { = };
            
char[] kArgStart = new char[] { -, \\ };

             CommandArgs ca
= new CommandArgs();
            
int ii = -1;
            
string token = NextToken( args, ref ii );
            
while ( token != null )
             {
                
if (IsArg(token))
                 {
                    
string arg = token.TrimStart(kArgStart).TrimEnd(kEqual);

                    
string value = null;

                    
if (arg.Contains("="))
                     {
                        
string[] r = arg.Split(kEqual, 2);
                        
if ( r.Length == 2 && r[1] != string.Empty)
                         {
                             arg
= r[0];
                             value
= r[1];
                         }
                     }
                    
                    
while ( value == null )
                     {
                        
string next = NextToken(args, ref ii);
                        
if (next != null)
                         {
                            
if (IsArg(next))
                             {
                                 ii
--;
                                 value
= "true";
                             }
                            
else if (next != "=")
                             {
                                 value
= next.TrimStart(kEqual);
                             }
                         }
                     }
                    
                     ca.ArgPairs.Add(arg, value);
                 }
                
else if (token != string.Empty)
                 {
                     ca.Params.Add(token);
                 }

                 token
= NextToken(args, ref ii);
             }

            
return ca;
         }

        
static bool IsArg(string arg)
         {
            
return (arg.StartsWith("-") || arg.StartsWith("\\"));
         }

        
static string NextToken(string[] args, ref int ii)
         {
             ii
++;
            
while ( ii < args.Length )
             {
                
string cur = args[ii].Trim();
                
if (cur != string.Empty)
                 {
                    
return cur;
                 }
                 ii
++;
             }

            
return null;
         }

     }
}
然后在程序的入口Main函数中,增加对参数化的登录解析,如下所示:

        [STAThread]
        static void Main(string[] args)
         {
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(
false);

            
if (args.Length > 0)
             {
                
//args = new string[] { "-u ", "admin", "-p", "4e0a40090737639a661f6e7109f1062c585dff410f668c3c5f836caf8ef54e9a695bfe48647bb62450457fe40b6c383c6dbd6e0002673a4ae14a74634679bb12487c7fc0406e7aac6611" };
                 LoginByArgs(args);
             }
            
else
             {
                 LoginNormal(args);
             }
         }

      /// <summary>
        
/// 使用参数化登录
        
/// </summary>
        
/// <param name="args"></param>
        private static void LoginByArgs(string[] args)
         {
             CommandArgs commandArgs
= CommandLine.Parse(args);
            
if (commandArgs.ArgPairs.Count > 0)
             {
                
#region 获取用户参数
                
string userName = string.Empty;
                
string identity = string.Empty;
                
foreach (KeyValuePair<string, string> pair in commandArgs.ArgPairs)
                 {
                    
if ("U".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                     {
                         userName
= pair.Value;
                     }
                    
if ("P".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                     {
                         identity
= pair.Value;
                     }
                 }
                
#endregion

                
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(identity))
                 {
                    
bool bLogin = 登录验证方法(userName.Trim(), identity);
                    
if (bLogin)
                     {
                         ShowMainDialog();
                     }
                    
else
                     {
                         LoginNormal(args);
                     }
                 }
             }
         }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的学生成绩管理系统的实现,基于Python语言和面向对象编程思想: ```python class Student: def __init__(self, student_id, name, score_ds, score_web, score_eng): self.student_id = student_id self.name = name self.score_ds = score_ds self.score_web = score_web self.score_eng = score_eng self.average_score = (score_ds + score_web + score_eng) / 3 def get_info(self): return f"{self.student_id}\t{self.name}\t{self.score_ds}\t{self.score_web}\t{self.score_eng}\t{self.average_score:.2f}" class ScoreManager: def __init__(self): self.students = [] def add_student(self, student): self.students.append(student) def sort_by_average_score(self): self.students.sort(key=lambda s: s.average_score, reverse=True) def show_students(self): print("ID\tName\tDS\tWeb\tEng\tAvg") for student in self.students: print(student.get_info()) # Example usage manager = ScoreManager() manager.add_student(Student("001", "Alice", 85, 92, 78)) manager.add_student(Student("002", "Bob", 90, 78, 88)) manager.add_student(Student("003", "Charlie", 82, 85, 90)) manager.sort_by_average_score() manager.show_students() ``` 这个系统中,我们定义了两个类:`Student` 和 `ScoreManager`。 `Student` 类表示一个学生的信息,包括学号、姓名、三门课程的成绩以及平均成绩。在 `__init__` 方法中,我们通过输入的成绩计算出了平均成绩并保存到了实例属性 `average_score` 中。`get_info` 方法用于返回一个字符串,表示该学生的所有信息,方便后面的打印输出。 `ScoreManager` 类表示学生成绩管理系统,提供了添加学生、按平均成绩排序和展示学生信息等功能。在 `__init__` 方法中,我们初始化了一个空的学生列表。`add_student` 方法用于往列表中添加一个学生对象,`sort_by_average_score` 方法用于按平均成绩由高到低对学生列表进行排序,`show_students` 方法用于打印输出每个学生的信息。 在实际使用时,我们可以通过创建一个 `ScoreManager` 对象,并调用其各种方法来完成学生成绩管理的操作。在上面的例子中,我们首先通过调用 `add_student` 方法添加了三个学生的信息,然后调用 `sort_by_average_score` 方法对学生列表按平均成绩排序,最后调用 `show_students` 方法打印输出排序后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值