C# mstsc 远程桌面 自动登录 控制台程序自启且有界面

背景:windows环境下,原有程序为控制台应用程序,需要把程序做成开机自启。

方案一:把程序重新做成服务。改动大且运维习惯改变,暂不考虑。

方案二:把程序对应的快捷方式添加到启动目录(windows server 2016为:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,其他windows版本启动目录请自查)。服务器重启后,若无用户登录,则程序不会启动。

方案三:用windows自带的“任务计划程序”,

触发器:选系统启用时;

操作:启用程序,到对应目录选择需启用的程序;

常规:1.“只在用户登录时运行”:服务器重启后,若无用户登录,则程序不会启动。

2.“不管用户是否登录都要运行”:程序会自启,可在任务管理器查看对应的进程,但是没有对应的控制台界面

方案四:远程桌面连接后,再自启

设置服务器可远程桌面登录且允许多连接(具体如何配置请自查)。

在服务器上运行mstsc,连接自己,记住凭证,勾选不再询问我是否连接到此计算机,然后保存rdp文件,新建一个bat文件,内容如下:mstsc D:\Default.rdp,路径为刚保存drp文件的路径。

通过方案三,常规选择“不管用户是否登录都要运行”,操作选择刚刚建立bat文件。(为什么不直接选择rdp文件?通过测试,发现只能是bat和exe文件)。

重启服务器后,直接访问程序,发现已启动,通过远程桌面登录,发现也有控制台程序的界面。

到此,已基本解决问题。

如果服务器需定期修改密码,则每次都要重新创建rdp文件,就很烦。

方案五:借助Microsoft RDP client control实现远程桌面自动登录

首先注册控件:regsvr32  C:\Windows\System32\mstscax.dll。

VS2019 新建一个Windows窗体项目,打开菜单"工具->选择工具箱项",选择COM组件"Microsoft RDP Client Control -version 9":

界面:

  

添加配置:

连接按钮核心代码:

                    this.RdpClient.Server = this.textBoxIP.Text;
                    this.RdpClient.UserName = this.textBoxUser.Text;
                    this.RdpClient.AdvancedSettings2.RDPPort = Convert.ToInt32(this.textBoxPort.Text);
                    this.RdpClient.AdvancedSettings2.SmartSizing = true;

                    this.RdpClient.AdvancedSettings9.NegotiateSecurityLayer = true;

                    IMsTscNonScriptable secured = (IMsTscNonScriptable)this.RdpClient.GetOcx();
                    secured.ClearTextPassword = this.textBoxPassword.Text;
                    this.RdpClient.AdvancedSettings5.ClearTextPassword = this.textBoxPassword.Text;
                    this.RdpClient.AdvancedSettings9.EnableCredSspSupport = true;

                    this.RdpClient.FullScreenTitle = this.textBoxIP.Text;                   

                    this.RdpClient.Connect();

RdpClient为控件名

 自动连接核心代码:

在构造函数里加上

public FormRDP()
        {
            InitializeComponent();

            LoadSetting();

            if (Settings.Default.AutoConnect)
            {
                this.WriteLog($"当前模式为自动连接:连接按钮不可用,{Delay}秒后自动连接!");
                this.buttonConnect.Enabled = false;
                Thread.Sleep(Delay * 1000);
                //经过测试 不能在后台线程对ActiveX 控件进行操作,会直接抛异常
                //所以只能写在构造函数里
                buttonConnect_Click(null, null);//连接按钮操作方法

                Timer = new System.Threading.Timer(Timer_Callback);
                Timer.Change(Delay * 1000, Timeout.Infinite);

                this.WriteLog($"自动连接:{Delay}秒后退出!");
            }
            else
            {
                this.WriteLog($"当前模式为手动连接:可点击连接按钮!");
            }
        }

        private void Timer_Callback(object state)
        {
            this.WriteLog("exit");
            Environment.Exit(0);
        }

        private void LoadSetting()
        {
            this.textBoxIP.Text = Settings.Default.IP;
            this.textBoxPort.Text = Settings.Default.Port.ToString();
            this.textBoxUser.Text = Settings.Default.User;
            this.textBoxPassword.Text = Settings.Default.Passwrod;
            this.Delay = Settings.Default.delay;
        }

最后通过方案三配置,常规选择“不管用户是否登录都要运行”,操作选择刚刚生成的RDPClient.exe文件。 

重启服务器后,直接访问程序,发现已启动,通过远程桌面登录,发现也有控制台程序的界面。

如果服务器需修改密码,则直接在RDPClient.exe.config修改密码即可。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值