C# 是否有方法将当前windows用户的凭据传递到LyncClient.Submit()中

C# 是否有方法将当前windows用户的凭据传递到LyncClient.Submit()中,c#,login,credentials,suppress,lync,C#,Login,Credentials,Suppress,Lync,我正在创建通过Microsoft Lync API与Microsoft Lync Server交互的输入/输出系统托盘应用程序。是否有方法将当前windows用户的用户名和密码传递给Lync API,以便用户自动登录,而不是每次都输入凭据?否,与访问web服务不同,没有方法强制Lync使用登录用户凭据。第一次在计算机上运行Lync客户端时,您就可以看到这一点-即使您以域用户身份登录到计算机,也会提示您输入域凭据 不过,不会丢失所有内容,因为Lync(默认情况下)将在输入凭据时保存凭据,然后在每次

我正在创建通过Microsoft Lync API与Microsoft Lync Server交互的输入/输出系统托盘应用程序。是否有方法将当前windows用户的用户名和密码传递给Lync API,以便用户自动登录,而不是每次都输入凭据?

否,与访问web服务不同,没有方法强制Lync使用登录用户凭据。第一次在计算机上运行Lync客户端时,您就可以看到这一点-即使您以域用户身份登录到计算机,也会提示您输入域凭据

不过,不会丢失所有内容,因为Lync(默认情况下)将在输入凭据时保存凭据,然后在每次以该用户身份登录时将其显示回服务器。您可以检查Lync是否设置为在注册表中保存密码:

[HKEY_CURRENT_USER\Software\Microsoft\Communicator]
"SavePassword"=dword:00000001
要在API中利用这一点,您需要:

  • 以通常的方式初始化客户端
  • 注册lyncClient.CredentialRequested事件
  • 调用lyncClient.BeginSignIn,传递登录用户的sip uri(为方便起见,lyncClient.uri属性通常设置为上次登录用户的uri)。为用户名和密码传递null
  • 现在-如果您的用户以前没有登录到Lync(或您的应用程序),您将获得CredentialRequested事件

  • 使用CredentialRequestedEventArgs.Cancel()取消事件
  • 显示一些UI以从用户处收集用户名和密码,然后使用这些凭据调用BeginSignIn
  • 或者,使用空用户名和密码调用BeginSignIn,然后处理CredentialRequested,并使用CredentialRequestedEventArgs中的submit方法将凭据提交到服务器(submit方法中的最后一个参数必须设置为True以保存密码)
  • (我记不得上面2或3种方法中哪种是推荐的方法——最好两种方法都尝试一下,看看哪种方法你运气最好)

    下次用户登录时(假设注册表中的SavePassword设置为true),将传递保存的凭据,因此用户将在不触发CredentialRequested事件的情况下登录

    很好地涵盖了这个过程(我假设您在UI抑制模式下运行Lync,因为这只是抑制模式下的一个问题)