2

我目前正在开发一个Windows应用商店应用,最终将在ARM设备可用时针对它们。现在,我一直在我的台式电脑上开发和测试Visual Studio,并且一切正常。但是,当我尝试创建应用程序包并将其传递给公司内部的其他人员进行测试时,应用程序将无法正常运行。Windows 8 Metro应用端负载部署

该解决方案包括两个项目。第一个是设置为构建dll文件的C++项目。这样做的目的是揭示似乎无法访问C#项目的Direct2D和DirectWrite库。第二个项目是C#项目,它引用了这个dll的绘图功能,并包含一个XAML界面和大部分的程序逻辑。所有这些都可以在我的开发机器上从Visual Studio中完美工作(也可以在安装包时使用)。

当我发送给公司内的其他人的包文件,安装似乎通过PowerShell脚本安装做工精细。该图块显示在开始屏幕上,程序将启动几秒钟。出现C#和XAML接口,但应用程序的DirectX部分不可见,整个应用程序在几秒钟内关闭。这使我相信在安装时,dll可能不会正确安装或引用。我已经检查了包文件,并且在构建过程完成后,dll文件将包含在包中。

我已经打包了几个不同的测试程序(MSDN示例),它们都安装在它们的机器上,但是我们得到了相同的结果,它们不会运行(再次,构建它们时,所有示例在我的开发机器上运行良好) 。唯一正常工作的测试项目是一个简单的C#项目,完全不使用DirectX。我尝试过的任何DirectX示例都失败了(包括根本不使用C#的本机C++示例)。

要清楚,我用建筑工艺要在项目 - >销售 - >创建应用程序的软件包,并选择无选项上传到Windows应用商店。

有没有人有什么想法可能会出现错误的构建或安装过程?

在此先感谢您的帮助!

+0

只是一个问题,但是:你可以在Visual Studio的测试机器上启动项目吗?如在 - 你可以运行该应用程序而不必将其作为单独的包部署? –

+0

是的,他们已有Visual Studio的任何机器都可以在Visual Studio中启动项目。此外,一旦他们从Visual Studio中启动,Powershell部署方法就可以正常工作。似乎在Visual Studio中启动了一些东西,这使得所有的工作都可以正常工作。但是,对于我需要将应用程序传递给所有人的情况,这不是一个可行的选项。 – mcwadar

回答

2

它是否与Metro Sideloader一起使用?我不知道,如果它只是增加了一个UI到PowerShell脚本,但它适合我的球队和我用于测试...

祝你好运!

+0

我只是试着按照你的建议尝试了Metro Sideloader,它似乎不起作用。我下载了exe文件,以管理员身份运行并按照页面上的说明操作。一切似乎安装正确,应用程序报告成功。但是,该应用程序从未出现在拼贴屏幕上,并且在“所有应用程序”部分中也未找到该应用程序。在这一点上,我想我会再等几天,直到RT片出来,并试图为这些内部构建。无论如何,这正是我将要瞄准的目标。感谢您的建议。 – mcwadar

1

您是否正在将DirectX应用程序的调试版加载到未安装Windows SDK的计算机上? Visual Studio的默认DirectX项目和MSDN上的示例在创建D3D设备时都请求D3D11_CREATE_DEVICE_DEBUG标志。如果运行代码的计算机上未安装Windows SDK,则设备创建将失败。

以下是几个不同的选项,可以让您自行解锁。其中任何一个应该会给你想要的结果:

  • 创建发布包并部署它而不是调试包。

  • 或 - 转到DirectXBase.cpp,并从代码中删除D3D11_CREATE_DEVICE_DEBUG标志。

  • 或者 - 在目标机器上安装Visual Studio的远程调试工具。这将安装必要的SDK组件以允许创建D3D调试设备。关于这个选项的另一个很酷的事情是,一旦你设置好了,你就不需要手动创建包并且再次加载它们。只需告诉Visual Studio ARM计算机的名称,然后按F5远程部署即可。更多的信息在这里:http://msdn.microsoft.com/en-us/library/vstudio/bt727f1t.aspx

0

你如何在你的项目中部署本机DLL?你在使用项目到项目的参考吗?你可以验证你的DLL是否在包应用程序目录的根目录下的最终包中结束?

我建议使用Sysinternals Procmon来观察目标机器上的应用程序负载。如果崩溃或失败,您可以查看日志历史记录,了解它尝试加载和失败的DLL。通常这会显示为重复的一系列DLL加载探测器(它会尝试从应用程序目录加载dll,然后继续尝试其他许多路径)。