如何从vb.net中的安装程序捕获安装进度和返回值

时间:2016-05-13 15:47:31

标签: vb.net windows-installer installer exit-code return-code

我正在开发一个Windows应用程序(使用vb.net),可以在PC上安装各种版本的运行时,如vc ++,Direct X,.net框架等。我的程序必须能够在后台运行运行时安装程序(msi& exe),并执行以下操作:

1.检查天气是否已经(先前)安装了运行时间 2.在程序主窗体的进度条中显示安装进度。
3.最后从安装程序获取返回代码(退出代码),以指示安装成功与否的天气。

执行上述任务需要哪些代码?

此外,我想知道安装程序可以返回的所有可能的返回代码(值)。

2 个答案:

答案 0 :(得分:2)

所有这些可再发行组件可能具有不同的命令行选项,因此它不可能是所有内容的唯一答案。

目前尚不清楚如何获得安装进度。这几乎肯定不可能或非常困难。你问的是如何运行一个能够“偷”"一些其他程序的输出,在很多情况下将是Windows Installer。如果我有一个启动Windows窗体程序的程序,那么你要问"我如何获取该程序的内容并窃取输出消息"。这不是安装问题,而是Windows消息/ Windows消息循环问题。

这些设置使用的检测方法在内部编码(或配置为内部数据),因此您还要询问所有这些程序中的代码如何检测到未安装依赖项(在多个操作系统上)版本和32位和64位),其中一些可能在网上可用,但它不太可能随时可用于每个可再发行组件。

您可能还遇到了EULA问题。某些可再发行组件需要接受EULA,并且可能无法安装,除非它被接受,或者某些可能有一个命令行选项包含类似(仅作为示例)ACCEPTEULA = 1。

基本上你应该:

  1. 找到可用于所有可再发行组件的命令行选项,以查看它们是否具有仅显示进度的选项,然后让它们显示。

  2. 同样,看看他们是否有文档告诉您退出代码是否意味着成功。

  3. 不要试图找到所有检测方法 - 只需运行redist,如果目标已经安装,它就不会做任何事情。

  4. 最后,你正在重新发明轮子。 WiX,Bootstrap Manifest Generator,InstallShield,Advanced Installer(等等)都提供了已经执行此操作的引导程序作为安装软件的先决条件。由于存在现有解决方案,因此没有人编写代码来执行此操作。

答案 1 :(得分:0)

https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx

1638已经安装好了。 0表示安装成功。然而,心灵3010代表成功,但等待重启。

关于在父窗口中显示进度..这可能不是一项简单的任务。希望其他人可以帮助你。