【问题标题】:vb6 activex document project silent installvb6 activex 文档项目静默安装
【发布时间】:2010-08-02 06:01:10
【问题描述】:

我有一个 vb6 activex 文档项目,我需要创建一个在没有任何用户界面和用户干预的情况下运行的 msi 包(这是必需的,因为它必须通过活动目录进行部署)。我按照以下步骤操作:

  1. 我使用 Visual Studio 安装程序创建了一个 msi 项目并删除了所有用户界面。手动将所有 vbd 文件添加到项目中,编译它。当我运行 msi 时,它会在没有提示的情况下安装所有文件,但应用程序没有运行。

  2. 我使用打包和部署向导创建了一个包,然后打开了 vb pdw 项目的源代码,注释了所有消息框,并在需要的地方分配了默认值。然后编译 setup.exe 文件并用之前创建的安装包上的 setup.exe 复制/覆盖它。当我像“setup.exe -s install.log”这样从命令提示符运行它时,它在没有提示的情况下安装了应用程序,效果很好。并且应用安装后运行良好。

  3. 所以我决定使用 Visual Studio 2008 创建一个 msi 包并添加上面创建的安装包(使用包和部署向导)。在自定义操作中,我将 setup.exe 设置为使用“-s install.log”参数运行。我需要一个包含 App 路径的注册表项,因此我将其添加到注册表设置部分。

另一个要求是我需要在安装后运行另一个自解压 exe。该自解压器将查看上述注册表项并提取(覆盖)App 路径上的文件。

所以使用自定义操作,我将 update.exe 设置为在安装后运行。

现在,当我运行msi时,它运行良好,安装后运行update.exe,一切正常;但只是有时。我无法预测它何时有效,何时无效。当我在其他几台机器上尝试相同的 msi 时,它在某些机器上工作,而在其他机器上却不行。 当我检查“添加或删除程序”时,这个应用程序有很多条目。

我一直在为这个 msi 项目苦苦挣扎,现在我感到很无助。我不知道我做错了什么。如果有人能指出我正确的方向,我将不胜感激。

有没有其他方法可以在不提示的情况下为vb6 activex文档项目创建安装包?

【问题讨论】:

    标签: installation activex project document


    【解决方案1】:

    这适用于我使用 MSI 安装 ActiveX dll 文档:

    这个回复有点晚了,但我也为此苦苦挣扎了大约 一年前让它工作。关键似乎是在注册 ActiveX 在另一台 PC 上安装时的 exe 或 dll。以下对我有用;我只是 列出 dll 的步骤仍然没有 100% 成功:

    1. 创建您的 ActiveX dll 文档(您可以像 exe 一样使用带有 dll 的表单)
    2. 使用 VB 打包和部署将必要的文件收集到一个位置。 确保使用安全的 VB 系统文件(从http://www.jrsoftware.org/iskb.php?vb 下载它们的 zip 文件 [vb6sp6sys.zip])代替那些 由 VB 的打包和部署向导生成。
    3. 使用 VB 创建小型可执行文件(确保启动对象为 Sub Main)在下面的代码部分中显示。因为 Internet Explorer 是 ActiveX 文档的“容器”,所以这个小 exe 使用它的一个版本 (IE) 加载您的 UserDocument1.vbd,取决于您使用的操作系统。 Windows 7,我假设 Vista,默认使用不同版本的 IE,它似乎不想运行 ActiveX 文档。但是,在他们的 Program Files (x86) 中有一个版本的 IE,因此测试 (x86) 文件夹是否存在;如果不是,则假定这是 Windows 的较低版本并使用普通 IE 运行。将此小型可执行文件称为“SilentStartUp_ByOS.exe”
    4. 现在坏消息:您需要购买高级安装程序才能使用其专业版,需要从 DLL 的本机库和任何包含的 OCX。有一个免费版本 高级安装程序,但它没有此功能。 注意:可能还有其他安装包也可以执行此操作,但是 Advanced Installer 是我所知道的唯一一个。我是 Inno 的粉丝,但不能 想办法用 Inno 做到这一点。
    5. 包括上面 2. 中的所有文件,以及 3. 中创建的 exe。 你的安装包。为3中创建的exe分配一个图标。使用高级 安装程序并使其成为启动程序的快捷方式。
    6. 确保在 AppDataFolder\AnyFolderNameHere 而不是 ProgramFilesFolder 中安装所有内容(使用安装参数屏幕) 为了绕过对 Win7 非常严格的安全问题 和 Vista,更不用说是否安装在公司 Intranet 上。

    全部完成后,因为你的dll已经注册,IE应该可以 启动您的 ActiveX 文档。

    代码:

    Sub Main()
    
    Dim strTemp As String
    'ok, it may be Vista or Windows 7...
    strTemp = "C:\Program Files (x86)\Internet Explorer\"
    If CheckFileFolderExists(strTemp, False) = True Then
        'ok, use older version of IEXPLORE to run this on Win7 (or Vista)...
        Shell "C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE " & App.Path & "\UserDocument1.vbd", vbMaximizedFocus
    Else
        Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE " & App.Path & "\UserDocument1.vbd", vbMaximizedFocus
    End If
    
    End Sub
    
    Function CheckFileFolderExists(strName, fFile) As Boolean
    
    ' The fFile variable determines whether you're
    ' looking for a File (True) or Folder(False)
    ' The strName variable holds the fully qualified
    ' path you're looking for
    
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
      CheckFileFolderExists = False
    
      If fFile = True Then  ' It's a file
    
        If fso.FileExists(strName) = True Then
          CheckFileFolderExists = True
          Exit Function
        End If
    
      Else  ' It's a folder/directory
    
        If fso.FolderExists(strName) = True Then
          CheckFileFolderExists = True
          Exit Function
        End If
    
      End If
    
      Set fso = Nothing
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2017-03-27
      • 2011-05-15
      相关资源
      最近更新 更多