2014-10-10 326 views
2

我用Microsoft.SmartDevice.Connectivity與此連結的指示連接到Windows Phone 8.1操作系統:connect to windows phone 8 using console application
現在我可以連接到的Windows Phone 8.1模擬器或Windows電話8.1設備,我可以使用他們的ProductID啓動任何應用程序。
因此,現在我想通過使用此框架將我開發的應用程序安裝到這些設備上。我知道WP8.1的XAP包是一個.appx文件。要在這個框架內安裝1個應用我這樣使用的installApplication()方法:如何部署.appx到的Windows Phone 8.1

IRemoteApplication remoteApplication = iDevice.InstallApplication(appID, appID, applicationGenre, iconPath, xapPackage); 

其中的appid是產品ID,我得到了它在Package.appxmanifest頁面爲:
556ee9d4-5640-4120-9916-44b1ca27352f
但我得到了例外情況是:

"An unhandled exception of type 'Microsoft.SmartDevice.Connectivity.SmartDeviceException' occurred in Microsoft.Smartdevice.Connectivity.dll 

Additional information: An attempt was made to move the file pointer before the beginning of the file." 

當我使用由Visual Studio所提供的應用程序部署工具,這個程序可以安裝,但是當我使用連接框架,我不能安裝它。
那麼,如何使用Connectivity Framework安裝此應用程序?
請幫幫我。感謝您的幫助。

回答

6

是的,SmartDevice.Connectivity的AFAIK v11將無法部署APPX。你需要V12來部署APPX。即使部署WP8.1的工具,API也是如此不同。APPX是部署WP7-WP8.0 XAP的不同工具。

XAP deployment tool vs. 8.1 APPX deployment tool

無論如何,你可以使用此C#代碼部署了Windows Phone 8.1 APPX:

static void Main(string[] args) 
{ 
    // step #1: Add refrences. 
    // - Add DLL reference to: C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.1\Tools\AppDeploy\Microsoft.Phone.Tools.Deploy.dll 
    // GAC references are implicit on computers with VS2013/VS2014 installed alongside WP8.1 dev tools. 
    // - GAC reference to: Microsoft.Phone.Tools.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
    // - GAC reference to: Microsoft.SmartDevice.Connectivity.Interface, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
    // - GAC reference to: Microsoft.SmartDevice.MultiTargeting.Connectivity, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 

    try 
    { 
     // Step #2: Get devices 
     var devices = Utils.GetDevices(); 

     Console.WriteLine("Possible Devices for deployment: "); 
     foreach (var deviceInfo in devices) 
     { 
      Console.WriteLine("\t" + deviceInfo.ToString()); 
     } 

     // Step #3: choose a device 
     var device = devices.FirstOrDefault(d => d.ToString() == "Emulator 8.1 1080P 6 inch"); 

     if (device == null) 
      return; 
     Console.WriteLine("Using device: " + device.ToString()); 


     // step #4: Select XAP, DeploymentOptions and Manifest 
     string appxFileUri = @"D:\Users\Justin Angel\Documents\Visual Studio 2013\Projects\App15\App15\AppPackages\App15_1.1.0.0_AnyCPU_Test\App15_1.1.0.0_AnyCPU.appx"; 
     IAppManifestInfo manifestInfo = Utils.ReadAppManifestInfoFromPackage(appxFileUri); ; 
     DeploymentOptions deploymentOptions = DeploymentOptions.None; 

     // Step #5: deploy 
     Console.WriteLine("Attempting to deploy: " + manifestInfo.Name + " from " + appxFileUri); 
     Utils.InstallApplication(device, manifestInfo, deploymentOptions, appxFileUri); 
     Console.WriteLine("deployed successfully"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Failed to deploy"); 
    } 

    Console.ReadKey(); 
} 

當我嘗試運行此APPX已成功部署在我的機器一切正常和應用程序按預期方式安裝。

Foo Bar Baz Test app successfully installs

如果你想獲得與Windows手機發燒友8.1模擬器/設備自動化(安裝在SD卡上,刪除,企業安裝等),你可以玩不同的DeploymentOptions:

namespace Microsoft.Phone.Tools.Deploy 
{ 
    [Flags] 
    public enum DeploymentOptions 
    { 
    None = 0, 
    PA = 1, 
    Debug = 2, 
    Infused = 4, 
    Lightup = 8, 
    Enterprise = 16, 
    Sideload = 32, 
    TypeMask = 255, 
    UninstallDisabled = 256, 
    SkipUpdateAppInForeground = 512, 
    DeleteXap = 1024, 
    InstallOnSD = 65536, 
    OptOutSD = 131072, 
    } 
} 

Works on my machine

+0

如果你需要一個簡單的部署(用更少的選項),然後在命令行AppDeployCmd附帶wp8.1 SDK工具和作品真的很好 - 易於實現自動化。如果您需要關於如何使用multidevice.connectivity程序集的提示,也可以使用dotpeek或反射器對其進行反編譯。 – Stuart 2014-10-11 07:01:45

+0

有沒有辦法將appx部署到已經運行的模擬器? – Herno 2015-04-20 19:39:05