Windows Phone SDK提供了使用编程方法访问Windows Phone设备的程序集,以Windows Phone 8.1 SDK为例,它们位于:
%ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.1\Tools\AppDeploy\Microsoft.Phone.Tools.Deploy.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.Connectivity\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.Connectivity.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.Connectivity.Interface\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.Connectivity.Interface.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.ConnectivityWrapper.10\v4.0_11.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.ConnectivityWrapper.10.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.ConnectivityWrapper.11\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.ConnectivityWrapper.11.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.ConnectivityWrapper.12\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.ConnectivityWrapper.12.dll
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SmartDevice.MultiTargeting.Connectivity\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.Smartdevice.MultiTargeting.Connectivity.dll为了便于操作,可以同时加入Windows Phone Power Tools第三方工具的WindowsPhone.Tools.dll程序集,您可以在Windows Phone Power Tools的发行版本中找到它。
在项目中参考这些程序集后,引入下面的命名空间:
Imports WindowsPhone.Tools
Imports Microsoft.Phone.Tools.Deploy
Imports Microsoft.SmartDevice.Connectivity
Imports Microsoft.SmartDevice.Connectivity.Interface
Imports Microsoft.SmartDevice.MultiTargeting.Connectivity随后,即可以编程的形式访问Windows Phone设备。
枚举和连接设备
首先,初始化连接管理器:
Dim PhoneConnectionManager As New MultiTargetingConnectivity(System.Globalization.CultureInfo.CurrentCulture.LCID)使用MultiTargetingConnectivity.GetConnectableDevices()函数枚举可连接的设备,该函数返回由ConnectableDevice对象组成的集合,反映当前系统上可连接的设备对象:
Public Function EnumerateDevices() As List(Of ConnectableDevice)
Dim PhoneList As New List(Of ConnectableDevice)
For Each Phone As ConnectableDevice In PhoneConnectionManager.GetConnectableDevices()
PhoneList.Add(Phone)
Next
Return PhoneList
End FunctionConnectableDevice对象提供了Connect()函数实现设备连接,该函数返回IDevice操作接口,表示已连接到的设备:
Dim CurrentConnectedDevice As IDevice = PhoneList(0).Connect()此时,应该已经成功连接到了目标设备。
安装应用程序包
您可以通过编程方式向设备部署XAP、AppX或AppXBundle程序包。此处使用字符串变量AppPackagePath表示需要部署的程序包的路径。
安装程序包前,需要先获取该程序包的GUID等数据,可以通过Microsoft.Phone.Tools.Deploy命名空间下的Utils.ReadAppManifestInfoFromPackage()函数获取。对于XAP包,也可以使用Windows Phone Power Tools的WindowsPhone.Tools.dll程序集提供的Xap对象获取,通过该对象获取XAP包的GUID信息可以避免Utils.ReadAppManifestInfoFromPackage()函数在处理部分在包描述文件WMAppManifest.xml中声明了特殊权限的XAP包时遇到的XML错误。
'Parse package info
Dim AppGuid As System.Guid
Dim AppGenre As String
Dim AppIconPath As String
If AppPackagePath.ToUpper.EndsWith(".XAP") Then
Dim AppManifest As New Xap(AppPackagePath)
AppGuid = AppManifest.Guid
AppGenre = "32"
AppIconPath = AppManifest.Icon
Else
Dim AppManifest As IAppManifestInfo = Utils.ReadAppManifestInfoFromPackage(AppPackagePath)
AppGuid = AppManifest.ProductId
AppGenre = "32"
AppIconPath = CInt(AppManifest.PackageType).ToString()
End If若应用程序包在目标设备上已存在,则安装可能失败,因此可以在开始安装前使用IDevice.IsApplicationInstalled()函数,传入程序包的GUID检测应用程序是否存在,并在必要时通过IDevice.GetApplication()获取IRemoteApplication对象,调用Uninstall()方法卸载该应用程序:
'Check if package is already installed
If CurrentConnectedDevice.IsApplicationInstalled(AppGuid) Then
CurrentConnectedDevice.GetApplication(AppGuid).Uninstall()
End If随后,即可开始安装应用程序:
'Install package
CurrentConnectedDevice.InstallApplication(AppGuid, _
AppGuid, _
AppGenre, _
AppIconPath, _
AppPackagePath)




