Share via


将我的 VB6 Windows 应用引入Windows 10的应用商店

[原文发表地址]: Putting (my VB6) Windows Apps in the Windows 10 Store - Project Centennial

[原文发表时间]: September 14, ’16

 

image_3今天我注意到Evernote已经引入Windows的应用商店里了。我去应用商店里下载Evernote,然后运行它。没有下一步->下一步->下一步->完成之类的安装方式,只是安装上了并且运行的很好。它是一个Win32的app并且显示使用NodeWebKit作为它UI界面的一部分。但是它是一个Windows的app,正如VB6应用程序、.Net 应用程序和UWP(普遍的Windows平台)一样,因此我觉得这相当的酷。由于Evernote是应用商店的app,它就可以用Win10的一些新功能了,比如动态磁贴和通知,并且会持续更新。

利用通用Windows平台来创建和包装应用程序,Windows应用商店开始慢慢地扩展和引入了一些已有的应用程序和游戏。这就是他们在开发者会议上宣布的“百年工程”。它可以让你把任何的Windows app 引入Windows应用商店里,这简直太酷了。App在那里会比较安全,也不会扰乱你的机器,并且可以快速地安装和卸载。

这篇文章中,你可以了解到你的App转换时的一些详情。Windows应用商店最主要的一个好处就是,应用商店里面的App不会扰乱你的机器。

这些app在一个特殊的环境里面运行,访问app后, app的文件系统和注册表会被重定向。文件Regedit.dat是用于注册表的重定向的,它实际上是个注册表的配置单元,因此你可以在windows注册编辑器(Regedit)中查看它。AppData文件夹是文件系统里唯一的重定向文件系统,它重定向到所有UWP应用程序的应用程序数据存储的同一位置。这个位置被称为本地应用程序数据存储区,并且你可以通过LocalFolderproperty属性访问它。这样,你无需做任何事,代码就已经移植到读取和写入应用程序数据的正确位置了。你也可以直接在哪里进行写操作。文件系统重定向的一个好处是应用程序会卸载的比较干净。

该"DesktopAppConverter"现在已经发布在Windows 商店中了,虽然它目前是以命令提示符运行。如果您的Windows桌面应用程序有一个"静默安装程序",那么你可以运行此DesktopAppConvertor从而生成一个APPX包,然后就可以将其上传到Windows应用商店了。

备注:这个“百年纪念”的技术是在Windows10 的周年更新中,如果你还没有更新到此版本,现在你可以参考此文来进行更新。

也可以通过一些第三方的工具,如InstallShield和Wix来创建可发布到应用商店的App。这样您现有的MSI的App可以转换成UWP包然后发布到应用商店。

image_thumb_1

 

看起来有好几种方法可以使你现有的Windows应用程序转变成Windows10 应用商店里面可用的应用程序。你可以使用DesktopAppConverter去运行你的静默安装的程序。一旦你让你的应用程序变成应用商店的应用程序,你可以利用代码来使用动态磁贴、通知以及其他功能来“点亮”你的应用程序。可以在 GitHub里看到一个展示如何添加标题或者后台任务的示例

https://github.com/Microsoft/DesktopBridgeToUWP-Samples。如果你有Windows应用商店和可以通过传统方式安装的windows桌面程序版本,你就可以使用[Conditional("DesktopUWP")] 来编译。

如果你的应用程序是一个没有安装程序,只是简单的Xcopy部署应用程序,那就更简单了。这可以通过我在Windows10的机器上成功安装了VB6来证明。

备注:我使用VB6作为一个很有趣也很酷的例子,VB6我们好久都不支持了,但用它创建的应用程序仍然可以在Windows正常运行,是因为它们是Win32应用程序。对我来说,这意味着,如果我有一个VB6的程序,我想把他发布在应用商店并且扩大使用范围是完全可以的。

我做了一个可以在VB6上运行的小程序project1.exe。

image_8

 

参照HelloWorld的例子,我的 AppxManifest.xml文件内容如下。

image

文件夹里的内容包括工程文件 porject1.exe以及logo和一些图片文件。

如果我有一个静默安装程序,现在我可以运行DesktopAppConverter,但由于我只有一个xcopy的应用程序,我将在我的本地机器上运行以下命令来进行测试。

现在我的VB6小应用程序已经安装在本地,在开始菜单里可以看到。

image_11

当我准备用Visual Studio把我的应用程序制作好以提交到应用商店时,我会按照这个指导文档来操作。或者可以在命令行中使用MakeAppxSignTool工具来手动完成。

"C:\Program Files (x86)\Windows Kits\10\bin\x86\makeappx" pack /d . /p Project1.appx

 

接下来我需要购买一个代码签名证书,现在我会使用一个本地的假的证书来签名。

"C:\Program Files (x86)\Windows Kits\10\bin\x86\makecert" /n "CN=HanselmanVB6" /r /pe /h /0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 12/31/2016 /sv MyLocalKey1.pvk MyLocalKey1.cer"C:\Program Files (x86)\Windows Kits\10\bin\x86\pvk2pfx" -po -pvk MyLocalKey1.pvk -spc MyLocalKey1.cer -pfx MyLocalKey1.pfxcertutil -user -addstore Root MyLocalKey1.cer

备注:确保应用的清单的标识代码与签名证书的CN相匹配。这是从证书获取的完整字符串,否则你将会在事件查看器中看到如下奇怪的内容Microsoft|Windows\AppxPackagingOM|Microsoft-Windows-AppxPackaging/Operational 比如

"error 0x8007000B:应用程序清单发布服务器名称(CN=HanselmanVB6, O=Hanselman, L=Portland, S=OR, C=USA) 必须与签名证书的主题名称完全匹配 (CN=HanselmanVB6)."

我会使用像这样的命令行。记住,Visual studio可以隐藏很多类似这样的操作,但是手动做的好处是可以很好的了解细节。

"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /debug /fd SHA256 /a /f MyLocalKey1.pfx Project1.appxThe following certificates were considered:Issued to: HanselmanVB6Issued by: HanselmanVB6Expires: Sat Dec 31 00:00:00 2016SHA1 hash: 19F384D1D0BD33F107B2D7344C4CA40F2A557749After EKU filter, 1 certs were left.After expiry filter, 1 certs were left.After Private Key filter, 1 certs were left.The following certificate was selected:Issued to: HanselmanVB6Issued by: HanselmanVB6Expires: Sat Dec 31 00:00:00 2016SHA1 hash: 19F384D1D0BD33F107B2D7344C4CA40F2A557749The following additional certificates will be attached:Done Adding Additional StoreSuccessfully signed: Project1.appxNumber of files successfully Signed: 1Number of warnings: 0Number of errors: 0

现在我有一个本地开发者签名的Appx包,它里面有一个VB6应用程序。如果我双击就会得到Appx安装程序,但是我真正想做的就是把它用一个真正的证书签名并发布在Windows应用商店!

image_14

这是应用程序运行的截图。我觉得这真是一个很棒的用户体验。

image_15

在我看来,现在还只是初期阶段,我也很期待到时候我可以去Windows应用商店,下载到我最喜欢的一些软件,如Open Live Writer、Office和 Slack等等。现在该是您开始探索这些工具的时候了。

 

相关链接: