【问题标题】:How to deploy an .appx into Windows Phone 8.1如何将 .appx 部署到 Windows Phone 8.1
【发布时间】:2014-10-10 16:06:38
【问题描述】:

我使用 Microsoft.SmartDevice.Connectivity 通过以下链接中的说明连接到 Windows Phone 8.1 操作系统:connect to windows phone 8 using console application
现在,我可以连接到 Windows Phone 8.1 模拟器或 Windows Phone 8.1 设备,并且可以使用它们的 ProductID 启动任何应用程序。
所以现在我想安装我使用这个框架开发到这些设备的应用程序。我知道 WP8.1 的 XAP 包是一个 .appx 文件。要在此框架中安装 1 个应用程序,我使用如下所示的 InstallApplication() 方法:

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

哪个appID是ProductID,我在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 安装这个应用程序呢?
请帮我。感谢您的帮助。

【问题讨论】:

    标签: windows-phone-8.1 connectivity smart-device-framework


    【解决方案1】:

    是的,SmartDevice.Connectivity 的 AFAIK v11 将无法部署 APPX。您需要 V12 来部署 APPX。 API 是如此不同,即使部署 WP8.1 APPX 的工具与部署 WP7-WP8.0 XAP 的工具不同。

    无论如何,您都可以使用以下 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 已成功部署在我的机器上,一切正常,应用程序按预期安装。

    如果您想更好地使用 Windows Phone 8.1 模拟器/设备自动化(在 SD 卡上安装、删除、企业安装等),您可以尝试不同的部署选项:

    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,
      }
    }
    

    【讨论】:

    • 如果您需要一个简单的部署(选项较少),那么命令行 AppDeployCmd 附带 wp8.1 SDK 工具并且工作得非常好 - 易于自动化。如果您需要有关 multidevice.connectivity 程序集设计使用方式的提示,也可以使用 dotpeek 或反射器对其进行反编译。
    • 有没有办法将 appx 部署到已经运行的模拟器上?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多