Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要使用CreateObject()从VB6 COM自动化重新启动.NET WPF应用程序_C#_.net_Wpf_Com - Fatal编程技术网

C# 我需要使用CreateObject()从VB6 COM自动化重新启动.NET WPF应用程序

C# 我需要使用CreateObject()从VB6 COM自动化重新启动.NET WPF应用程序,c#,.net,wpf,com,C#,.net,Wpf,Com,我有一个正在工作的应用程序,我必须用C#中的.NET替换VB6 COM服务器。它由VB6客户端通过regitry使用CreateObject()ProgID和CLSID进行实例化。它支持一个自动化接口,通过VB6和C#.NET之间的通信,所有这些都可以正常工作 我的问题是我需要重新启动用C#NET编写的应用程序,而它在关闭后不会重新启动。 在旧版本为VB6的情况下重新启动 在VB6代码中,它将通过将接口和对象分配为“Nothing”来关闭服务器。 i、 e.MySvrObj.AutoIntFce

我有一个正在工作的应用程序,我必须用C#中的.NET替换VB6 COM服务器。它由VB6客户端通过regitry使用CreateObject()ProgID和CLSID进行实例化。它支持一个自动化接口,通过VB6和C#.NET之间的通信,所有这些都可以正常工作

我的问题是我需要重新启动用C#NET编写的应用程序,而它在关闭后不会重新启动。 在旧版本为VB6的情况下重新启动

在VB6代码中,它将通过将接口和对象分配为“Nothing”来关闭服务器。 i、 e.MySvrObj.AutoIntFce=无 i、 e.MySvrObj=无

要关闭我的C#.NET服务器,我必须用自动接口的方法替换“=Nothing”,该方法最终将调用Automation.Current.Shutdown()。这一切都起作用了,应用程序将关闭。 我的问题是关闭服务器后无法重新启动它

我最初开始跟踪错误“无法在同一AppDomain中创建多个System.Windows.Application实例”。根据下面的代码,这发生在“app=new app()”行上

我曾尝试在同一线程中重新运行现有应用程序,但当我到达System.Windows.Application.Current.run()行时,“Current”为空。然后我尝试执行app.Run(),消息是“无法运行多个项目”

我觉得我对一个让我追根究底的潜在问题没有把握。对我的问题的任何解释或解决办法都会很有帮助。提前谢谢

下面是VB关闭过程,它利用了接口(IDotNet)的.NET部分,还将“=Nothing”分配给将关闭旧VB6服务器的接口。旧的VB6应用程序也创建了相同的excel进程

Friend Sub Shutdown()

On Error GoTo ErrorHandler

Dim ShutDownDotNet As IDotNet

If Not (mimMaint Is Nothing) Then
    Set ShutDownDotNet = mimMaint.DotNet
    ShutDownDotNet.QuitDotNet
    If Not (mimMaint.Job Is Nothing) Then
        Set mimMaint.Job.ProgressClient = Nothing
        Set mimMaint = Nothing
        If Not (mimtToolbar Is Nothing) Then
            mimtToolbar.GetButton("Maintenance").Enabled = False
        End If
        mblnAvail = False
    End If
End If

Exit Sub

ErrorHandler:
   If Err.Number = 462 Then
     Resume Next
   Else
     gmcMessaging.ReportError "Maintenance::Shutdown", Err.Number, Err.Description
     Resume Next
   End If

End Sub

你能提供一个完整的最低限度的例子,包括关机代码吗?谢谢你的回复。应用程序有一个相当复杂的关闭过程。它创建了一个Excel进程。这可能是我的下一步,复制整个COM对象,并用不同的CLSID注册它,看看它是否有效。这将告诉我,如果有什么东西卡在内存中,打破了我对COM的期望。我想知道是否混合了托管和非托管客户端/服务器,以及它们是否存在于同一AppDomain中,而不只是非托管客户端和服务器。我正在努力确保我没有做任何违法的事情。
Friend Sub Shutdown()

On Error GoTo ErrorHandler

Dim ShutDownDotNet As IDotNet

If Not (mimMaint Is Nothing) Then
    Set ShutDownDotNet = mimMaint.DotNet
    ShutDownDotNet.QuitDotNet
    If Not (mimMaint.Job Is Nothing) Then
        Set mimMaint.Job.ProgressClient = Nothing
        Set mimMaint = Nothing
        If Not (mimtToolbar Is Nothing) Then
            mimtToolbar.GetButton("Maintenance").Enabled = False
        End If
        mblnAvail = False
    End If
End If

Exit Sub

ErrorHandler:
   If Err.Number = 462 Then
     Resume Next
   Else
     gmcMessaging.ReportError "Maintenance::Shutdown", Err.Number, Err.Description
     Resume Next
   End If

End Sub