C#跨PC远程调用程序并显示UI界面

 更新时间:2022年05月14日 10:16:46   作者:残生  
这篇文章主要为大家介绍了使用C#跨PC远程调用程序并显示UI界面,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

在项目中有一个需求是需要在局域网内跨PC远程调用一个程序,并且要求有界面显示,调查了一些资料,能实现远程调用的.Net技术大概有PsExec、WMI、Schedule Task。

这三种方式都做了一个尝试,结果发现PsExec、WMI都只能在进程列表中看到程序执行,却无法显示界面,无法执行程序中的管理员权限操作,就连简单的在C盘创建一个txt文本都做不到。

也许是我使用方法不对,无法达到我的需求。直到后来使用了Schedule Task的方式之后,才成功实现了我的需求。

第三种技术的主要思路是先通过CMD窗口调用schtasks命令在远程PC上创建一个单次执行的计划任务,在计划任务中调用外部程序,然后立即执行,可以显示界面,并且可以执行管理员权限的操作。

用到的schtasks命令:

string queryTaskArg = string.Format(@" /query /s {0} -u domainname\{1} -p {2} /tn install", ip, username, password);
string creatTaskArg = string.Format(@" /create /s {0} -u domainname\{1} -p {2} /sc ONCE /st 10:00 /tn installSelector /tr {3} /rl HIGHEST /ru Local /IT", ip, username, password, installPath);
string runTaskArg = string.Format(@" /run /s {0} -u domainname\{1} -p {2} /tn install", ip, username, password); ;
string deleteTaskArg = string.Format(@" /delete /s {0} -u domainname\{1} -p {2} /tn install /F", ip, username, password);

schtasks /create 创建计划任务

schtasks /query 查询计划任务

schtasks /run z执行计划任务

schtasks /delete 删除计划任务

ip:远程PC的IP地址

username:远程PC的登陆用户名

password:远程PC的登陆密码

/tn 计划任务的名字 /tr调用程序的路径 /sc设置执行频率 /rl 设置运行权限

需要注意的是使用这个方法远程调用程序会有相对路径方面的问题,不建议在执行程序中使用相对路径访问其他文件。

完整代码:

string creatTaskArg = string.Format(@" /create /s {0} -u domainname\{1} -p {2} /sc ONCE /st 10:00 /tn installSelector /tr {3} /rl HIGHEST /ru Local /IT", ip, username, password, installSelectorPath);
                string runTaskArg = string.Format(@" /run /s {0} -u domainname\{1} -p {2} /tn installSelector", ip, username, password); ;
                string deleteTaskArg = string.Format(@" /delete /s {0} -u domainname\{1} -p {2} /tn installSelector /F", ip, username, password);
                System.Diagnostics.Process p1 = new System.Diagnostics.Process();
                p1.StartInfo.FileName = @"schtasks.exe";
                p1.StartInfo.Arguments = string.Format(@" /query /s {0} -u domainname\{1} -p {2} /tn installSelector", ip, username, password);
                p1.StartInfo.UseShellExecute = false;
                p1.StartInfo.RedirectStandardError = true;
                p1.StartInfo.RedirectStandardOutput = true;
                p1.StartInfo.CreateNoWindow = true;
                p1.Start();
                p1.WaitForExit();
                string err = p1.StandardError.ReadToEnd();
                string sop = p1.StandardOutput.ReadToEnd();
                if (!string.IsNullOrEmpty(err) && string.IsNullOrEmpty(sop))
                {
                    p1.StartInfo.Arguments = creatTaskArg;
                    p1.Start();
                    p1.WaitForExit();
                    err = p1.StandardError.ReadToEnd();
                    sop = p1.StandardOutput.ReadToEnd();
                    if (!sop.ToLower().Contains("success"))
                    {
                        throw new Exception(string.Format("Create schedule task failed on {0}", ip));
                    }
                }
                else
                {
                    _logger.Error(err);
                }
                p1.StartInfo.Arguments = runTaskArg;
                p1.Start();
                p1.WaitForExit();
                err = p1.StandardError.ReadToEnd();
                sop = p1.StandardOutput.ReadToEnd();
                if (!string.IsNullOrEmpty(err) || !sop.ToLower().Contains("success"))
                {
                    throw new Exception(string.Format("Run schedule task failed on {0}", ip));
                }
                p1.StartInfo.Arguments = deleteTaskArg;
                p1.Start();
                p1.WaitForExit();
                err = p1.StandardError.ReadToEnd();
                sop = p1.StandardOutput.ReadToEnd();
                if (!string.IsNullOrEmpty(err) || !sop.ToLower().Contains("success"))
                {
                    throw new Exception(string.Format("Delete schedule task failed on {0}", ip));
                }
                p1.Close();

以上就是C#跨PC远程调用程序并显示UI界面的详细内容,更多关于C#跨PC远程调用显示UI的资料请关注得牛网其它相关文章!

相关文章

  • C#实现写入文本文件内容的方法

    C#实现写入文本文件内容的方法

    这篇文章主要介绍了C#实现写入文本文件内容的方法,涉及C#针对文本文件的判断、创建及写入等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • c# 三种方法调用WebService接口

    c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • c#数据绑定之数据转化为信息的示例

    c#数据绑定之数据转化为信息的示例

    这篇文章主要介绍了c#数据绑定中的数据转化为信息的示例,需要的朋友可以参考下
    2014-04-04
  • C#简单连接sql数据库的方法

    C#简单连接sql数据库的方法

    这篇文章主要介绍了C#简单连接sql数据库的方法,涉及C#基于控制台的数据库连接创建于命令执行相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C#实现影院售票系统

    C#实现影院售票系统

    这篇文章主要为大家详细介绍了C#实现影院售票系统,解析了售票系统的难点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享,使用异步委托+回调函数方式实现,大家参考使用吧
    2013-12-12
  • Unity3D实现模型随机切割

    Unity3D实现模型随机切割

    这篇文章主要为大家详细介绍了Unity3D实现模型随机切割,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 10个C#程序员经常用到的实用代码片段

    10个C#程序员经常用到的实用代码片段

    如果你是一个C#程序员,那么本文介绍的10个C#常用代码片段一定会给你带来帮助,从底层的资源操作,到上层的UI应用,这些代码也许能给你的开发节省不少时间。以下是原文:
    2015-09-09
  • winform 实现控制输入法

    winform 实现控制输入法

    在工作中遇到这样一个问题,在系统使用过程中,输入法会变灰导致无法使用输入法输入文字,就好像输入法被禁用了没有启用似的。对此,在这里做个备录
    2015-08-08
  • C# 实现窗口无边框,可拖动效果

    C# 实现窗口无边框,可拖动效果

    这篇文章主要介绍了C# 实现窗口无边框,可拖动效果,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2018-03-03

最新评论