我们有一个win32桌面应用程序,它将收集机器上安装的应用程序列表。通常我们会去卸载hive以收集应用程序列表(这类似于控制面板如何填充其添加/删除程序列表)。使用Windows 8商店应用程序,由于商店应用程序与桌面应用程序的存储方式不同,因此无法再使用。我能够找到此源代码Enumerate app packages by user SID sample。我在Windows 8上测试过,效果很好。但是有一个问题。
我希望能够与Windows CRT静态链接,所以我不需要将CRT与这个简单的exe一起分发(我不能假设所需的CRT将安装在客户的机器上,加上我们的夜间构建环境是仍然是VS2005,这只能建立在开发者机器上,因此,CRT版本可以作为VS更新或Windows更新的一部分进行更新,这将导致CRT的版本高于客户机器上的CRT版本。我们当前的解决方案将提供CRT版本,我们的代码是作为私有并排组装(在VS2005上)构建的。但是对于Windows 8上的WinRT,我无法再静态链接CRT库(旧的CLI / C ++实际上有相同的限制)。
示例代码使用Windows 8(WinRT)上的PackageManager new。只是想知道是否有其他方法可以在没有WinRT的情况下获取此信息。我的直觉是没有,但问不会伤害。
顺便提一下,我注意到的一件事是在VS 2012上构建的exe的嵌入式清单没有像CRT那样的依赖组件,就像我在VS2005上构建的exe一样:
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
答案 0 :(得分:0)
要访问Windows 8的新Modern UI部分,您需要WinRT库。