关闭 Lync 客户端(并排)与 Lync SDK 2013 留下孤立的进程

Posted

技术标签:

【中文标题】关闭 Lync 客户端(并排)与 Lync SDK 2013 留下孤立的进程【英文标题】:Shutdown Lync Client (side by side) with Lync SDK 2013 leaves orphaned processes 【发布时间】:2013-09-27 12:26:49 【问题描述】:

使用 Lync SDK 时,并排启动客户端,然后将其关闭 - 它会留下一个永不退出的孤立主机进程。我必须通过代码或任务管理器手动终止该进程以使其消失。 所以我在我的应用程序启动中使用代码。 当有多个进程同时运行时 - 我会遇到其他问题并且还会无限期地离开进程。

遵循所有 MSDN 操作指南和示例,但仍然发生相同的行为。这是我编写的包装类中的一些代码。

    public void Startup()
    
        // Same thread should do the startup and shutdown right?
        var _currentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;

        this.KillRunningBackgroundProcesses("lync");
        lyncClient = Microsoft.Lync.Model.LyncClient.GetClient(_sideBySide);

        // Init lync (needed for side-by-side)
        if (lyncClient.State == Microsoft.Lync.Model.ClientState.Uninitialized)
        
            lyncClient.BeginInitialize(
                (result) =>  lyncClient.EndInitialize(result); 
                , null);
        

        // Wire events
        lyncClient.StateChanged += lyncClient_StateChanged;
        lyncClient.CredentialRequested += lyncClient_CredentialRequested;
        lyncClient.SignInDelayed += lyncClient_SignInDelayed;
        lyncClient.CapabilitiesChanged += lyncClient_CapabilitiesChanged;
        lyncClient.ClientDisconnected += lyncClient_ClientDisconnected;
        lyncClient.ConversationManager.ConversationRemoved += lyncClient_ConversationManager_ConversationRemoved;
        lyncClient.ConversationManager.ConversationAdded += lyncClient_ConversationManager_ConversationAdded;
    

这是关闭代码:

    public void Shutdown()
    
        // Same thread should do the startup and shutdown right?
        var _currentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;

        // Unwire events
        lyncClient.StateChanged -= lyncClient_StateChanged;
        lyncClient.CredentialRequested -= lyncClient_CredentialRequested;
        lyncClient.SignInDelayed -= lyncClient_SignInDelayed;
        lyncClient.CapabilitiesChanged -= lyncClient_CapabilitiesChanged;
        lyncClient.ClientDisconnected -= lyncClient_ClientDisconnected;
        lyncClient.ConversationManager.ConversationRemoved -= lyncClient_ConversationManager_ConversationRemoved;
        lyncClient.ConversationManager.ConversationAdded -= lyncClient_ConversationManager_ConversationAdded;

        //this.lyncClient.BeginShutdown(this.lyncClient.EndShutdown, someStateObject);
        this.lyncClient.BeginShutdown( 
            (result) =>  this.lyncClient.EndShutdown(result); 
            , null );

        this.lyncClient = null;
    

我如何优雅地退出/关闭 Lync 客户端,并使用它 - 进程?

【问题讨论】:

这是打算如何使用的,因为我认为让进程无限期地挂起不是正常行为......或者是吗? 我在 windows 8 上遇到了同样的问题,但它是随机出现的。 我和你一样,虽然我在关机后也杀了它。每个人似乎都有同样的问题,似乎没有任何好的解决方案 atm.. 【参考方案1】:

我求助于为 Client 类编写了一个包装器,它在我开始初始化 Client 之前获取当前时间,然后在 Client 类初始化并产生新的 Lync.exe 进程之后,扫描活动的 Lync .exe 处理并在该开始时间之后获取第一个并存储该 pid。

然后,当我分解我的包装类时,我取消初始化 Client 对象,然后使用存储的 pid 终止进程。这是一种可怕的肮脏黑客,但它工作得相当好。唯一的问题是桌面用户碰巧在并行客户端启动时在短窗口中启动了 Lync。

有趣的事实是,尽管文档表明您一次只能在并行模式下驱动一个 Lync 客户端,但此限制实际上仅限于每个进程。如果您在自己的子进程中生成每个客户端并在子进程和主进程之间进行通信,则您可以驱动任意数量的并排 Lync 客户端。

【讨论】:

以上是关于关闭 Lync 客户端(并排)与 Lync SDK 2013 留下孤立的进程的主要内容,如果未能解决你的问题,请参考以下文章

通过客户端 SDK 使 Lync MeetNow 对话保持活跃

Lync 2013 客户端 SDK 是不是与 Skype for Business 兼容?

Lync 客户端 SDK 控件的 UI 是不是有任何更改?

Lync 客户端 SDK 报告错误的状态代码

Lync sdk 与 Asterisk 一起使用?

Lync 客户端 SDK PSTN 呼叫