2012-01-09 99 views

回答

3

可以列出安装在手机上的第三方应用程序,但只能从桌面计算机上(即不能从设备上运行的应用程序)列出,因此可能并不是您要的。

首先,你需要添加一个引用到这个组件:

C:\ Program Files文件(x86)的\ Common Files文件\微软共享\手机工具\ CoreCon \ 10.0 \斌\ Microsoft.Smartdevice。 Connectivity.dll

然后将以下代码将连接到仿真器(useEmulator = false为设备),并写入安装到控制台的所有应用程序的产品ID。

int locale = CultureInfo.CurrentCulture.LCID; 
bool useEmulator = true; 

var datastoreManager = new DatastoreManager(locale); 

var phonePlatform = datastoreManager.GetPlatforms() 
    .Single(p => p.Name == "Windows Phone 7"); 

var phoneDevice = phonePlatform.GetDevices() 
    .First(d => d.IsEmulator() == useEmulator); 

phoneDevice.Connect(); 

var apps = phoneDevice.GetInstalledApplications(); 

foreach(RemoteApplication app in apps) 
{ 
    Console.WriteLine(app.ProductID.ToString()); 
} 

phoneDevice.Disconnect(); 

一些注意事项:

  • 正如前面提到的这些代码在.NET运行在桌面上,而不是手机本身
  • 只有产品ID是提供给您,访问GenreTitle将抛出a NotImplementedException
  • 我没有包含任何错误处理
  • 这是不是官方支持的API据我所知d可能会改变。
+0

酷!有了这个解决方案,我只需要找到一种方法将结果(手机上安装的应用程序)传输到手机(当手机仍连接到桌面时)。有任何想法吗? :)非常感谢你! – Panos 2012-01-10 15:19:57

+0

您可以使用[独立存储工具](http://msdn.microsoft.com/zh-cn/library/hh286408(v = VS.92).aspx)将文件直接传输到应用程序的存储器,或者您可以在主机上托管一台Web服务器,并使用[ResourceIntensiveTask](http://msdn.microsoft.com/zh-cn/library/microsoft.phone.scheduler.resourceintensivetask(v = VS.92))连接到该服务器。 .aspx)(在上电+运行10分钟后)在手机上。 – 2012-01-10 17:24:33

6

我认为这是不可能的合法的方式。

每个应用程序都位于其沙箱中,无法访问父文件夹或其他应用程序。

+0

正确,无法获取已安装应用程序的列表。 – 2012-01-09 12:20:06

0

也许你可以解释为什么你想获得这些信息。在某些情况下可能会制定解决方案,例如,如果您想知道是否在设备上安装了其他应用程序。 (这不太可能在设备上,并且可能依靠Web服务来跟踪您的安装基础)。

当然,拥有这些知识并不一定会帮助你。您无法启动其他应用程序,或者直接与其进行交互,因此可能会浪费时间进行尝试。

0

在这个时候,没有这样的API来获取已安装应用程序的列表。 更多的事情被限制在维护用户数据的安全。 :)

相关问题