关于外部调用exe文件的线程问题?

发布于 2021-11-05 06:13:21 字数 8622 浏览 777 评论 0

我用C#写了一个程序,使用VNCsharp类库,远程连接指定电脑,将这个程序编译后的exe文件作为一个外部文件在另外的一个exe中启动,我测试用的是cmd.exe中启动,在cmd.exe启动的时候,后面增加一个ip地址作为我写的那个程序要连接的电脑IP地址。

cmd中的命令是:VNC 172.17.3.211

注:VNC就是我写的那个程序的文件名。

以下是我写的exe文件的部分代码

namespace VNC
{
    public partial class Form1 : Form
    {
        private string ip;
        public Form1(string ip)
        {
            InitializeComponent();
            this.ip = ip;
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            try
            {
                //MessageBox.Show(ip);
                remoteDesktop1.Connect(ip,true,false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (remoteDesktop1.IsConnected)
            {
                remoteDesktop1.Disconnect();
            }
        }
    }
}

 

namespace VNC
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //string[] args = Environment.GetCommandLineArgs();
            //MessageBox.Show(args[0]);
            Application.Run(new Form1(args[0]));
        }
    }
}

单独运行我写的exe文件是没有问题的(参数在项目的属性对话框中“调试=》命令行”参数指定)。

但是在cmd.exe 命令中启动后会提示以下错误

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 VncSharp.VncClippedDesktopPolicy.RepositionImage(Image desktopImage)
   在 VncSharp.RemoteDesktop.DrawDesktopImage(Image desktopImage, Graphics g)
   在 VncSharp.RemoteDesktop.OnPaint(PaintEventArgs pe)
   在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   在 System.Windows.Forms.Control.WmPaint(Message& m)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
mscorlib
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3623 (GDR.050727-3600)
    基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
VNC
    程序集版本: 1.0.0.0
    Win32 版本: 1.0.0.0
    基本代码: file:///E:/创新小组/源码备份/VNCDemo/VNC/bin/Release/VNC.exe
----------------------------------------
System.Windows.Forms
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3623 (GDR.050727-3600)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3624 (GDR.050727-3600)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
VncSharp
    程序集版本: 1.0.0.0
    Win32 版本: 1.0.0.0
    基本代码: file:///E:/创新小组/源码备份/VNCDemo/VNC/bin/Release/VncSharp.DLL
----------------------------------------
System.Configuration
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Drawing.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.1433 (REDBITS.050727-1400)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing.resources/2.0.0.0_zh-CHS_b03f5f7f11d50a3a/System.Drawing.resources.dll
----------------------------------------
mscorlib.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.3623 (GDR.050727-3600)
    基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.1433 (REDBITS.050727-1400)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。

例如:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

启用 JIT 调试后,任何无法处理的异常
都将被发送到在此计算机上注册的 JIT 调试器,
而不是由此对话框处理。

=============================

我想到的原因可能是外部启动exe是作为子线程启动,所以会有问题,但是不知道怎么解决。

请各位有经验的人可以指点迷津,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文