使用.Net编程访问Windows 10 Mobile设备

Windows Phone SDK提供了使用编程方法访问Windows 10 Mobile设备的程序集,以Windows 10 Build 14393.795 SDK为例,它们位于:

%ProgramFiles(x86)%\Windows Kits\10\bin\x86\Microsoft.Diagnostics.Tracing.EventSource.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\Microsoft.Tools.Connectivity.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\Microsoft.Tools.Deploy.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\SirepClient.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\SirepInterop.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\SshClient.dll
%ProgramFiles(x86)%\Windows Kits\10\bin\x86\WinAppDeployCommon.dll

在项目中参考这些程序集后,引入下面的命名空间:

Imports Microsoft.Tools.Connectivity
Imports Microsoft.Tools.Deploy

请注意,SirepClient.dllSshClient.dll不是.Net程序集,您无需将它们加入参考,只需要将它们加入您的项目解决方案,并将“构建动作”设为“无”、“复制到输出目录”设为“有更新时才复制”即可。

随后,即可以编程的形式访问Windows 10 Mobile。

枚举和连接设备

首先,初始化设备发现工具,配置一个合理的设备发现超时值,并建立设备发现结果容器:

Dim PhoneConnectionManager As New DeviceDiscoveryService
Dim PhoneDiscoveryTimeOut As TimeSpan = TimeSpan.FromSeconds(5)
Dim DevicesDiscovered As New List(Of DiscoveredDeviceInfo)

连接DeviceDiscoveryService.Discovered()事件,该事件在发现连接的设备时触发,并提供可连接设备的DiscoveredDeviceInfo对象:

AddHandler PhoneConnectionManager.Discovered, Sub(sender As Object, e As DiscoveredEventArgs)
                                                  DevicesDiscovered.Add(e.Info)
                                              End Sub

配置设备发现超时值,并进行等待:

PhoneConnectionManager.Timeout = PhoneDiscoveryTimeOut
PhoneConnectionManager.Start()
Thread.Sleep(PhoneDiscoveryTimeOut)
PhoneConnectionManager.Stop()

DiscoveredDeviceInfo对象提供了设备的基本信息,使用这些信息可以配置ConnectionOptions实例,该实例可通过配置IP地址(ConnectionOptions.IPAddress)或GUID(ConnectionOptions.Guid)等方式,指定要连接的设备:

Dim ConnectionParam As New ConnectionOptions
ConnectionParam.Guid = DevicesDiscovered(0).UniqueId

请注意:建议不要在代码中显式设置ConnectionOptions对象的ConnectTimeout属性,设置该属性可能导致后续执行部署操作时,出现内容类似“violates pattern constraint of '\bms-resource:.{1,256}'”的COM组件异常(但实际上应用程序包最终可以在目标设备上正常部署和运行)。

配置ConnectionOptions实例完成后,使用RemoteDeployClient对象提供的Connect()方法实现设备连接:

Dim ConnectedPhone As RemoteDeployClient = RemoteDeployClient.CreateRemoteDeployClient()
ConnectedPhone.Connect(ConnectionParam)

此时,应该已经成功连接到了目标设备。

安装应用程序包

您可以通过编程方式向设备部署AppX或AppXBundle程序包。此处使用字符串变量AppPackagePath表示需要部署的程序包的路径,字符串列表AppDependencies表示该程序包的依赖项的路径集合(可以为空列表,不能为Nothing),字符串列表AppCertPath表示该程序包的证书路径(不需要证书时,应设为Nothing,不可以为空字符串)。

开始安装应用程序:

'Install package
ConnectedPhone.InstallAppx(InstallAppxOptions.ResolveDependencies, AppPackagePath, AppDependencies, AppCertPath)
除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License