首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vb6 activex文档项目静默安装

vb6 activex文档项目静默安装
EN

Stack Overflow用户
提问于 2010-08-02 06:01:10
回答 1查看 1.2K关注 0票数 0

我有一个vb6 activex文档项目,我需要创建一个不需要任何用户界面和用户干预的msi包(因为它必须通过active目录部署)。我遵循了以下步骤:

  1. I使用visual创建了一个msi项目,并删除了所有用户界面。将所有vbd文件手动添加到项目中,并编译它。当我运行msi时,它在没有提示的情况下插入所有文件,但应用程序没有运行。
  2. I使用包和部署向导创建了一个包,然后打开vb项目的源代码,注释了所有消息框,并在需要时指定了默认值。然后编译setup.exe文件,并在前面创建的安装包上使用setup.exe复制/覆盖它。当我从命令提示符(如“setup.exe -s install.log”)运行它时,它在没有提示的情况下安装了应用程序,运行良好。在installation.
  3. So之后,应用程序运行良好,我决定使用visual 2008创建一个msi包,并添加了上面创建的安装包(使用包和部署向导)。在自定义操作中,我将setup.exe设置为使用'-s install.log‘参数运行。我需要一个包含App的注册表条目,所以我将其添加到注册表设置部分。

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

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

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

我已经为这个msi项目挣扎了一段时间,现在我感到无助。我不知道我做错了什么。如果有人能给我指明正确的方向,我将不胜感激。

是否有其他方法无需提示而为vb6 activex文档项目创建安装包?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-10 19:20:20

这对于我使用MSI来安装ActiveX dll文档是可行的:

这一答复有点晚,但我也为此挣扎了大约一年,然后才开始工作。在另一台PC上安装时,关键似乎是注册ActiveX exe或dll。下面的内容对我很有用;我只列出了dll的步骤,但是还没有100%成功地使用exe:

  1. 创建您的ActiveX dll文档(您可以使用dll创建表单,就像
  2. 一样),
  3. 使用VB包和部署在一个地方收集必要的文件。确保使用安全的VB系统文件(从http://www.jrsoftware.org/iskb.php?vb下载它们的压缩文件http://www.jrsoftware.org/iskb.php?vb)来代替VB的包和部署向导生成的文件。
  4. 使用VB创建下面代码部分所示的小型可执行文件(确保Startup是Sub )。因为Internet是ActiveX文档的“容器”,这个小的exe使用它的一个版本(IE)加载UserDocument1.vbd,这取决于您使用的操作系统。Windows 7,我假设Vista默认使用不同版本的IE,它似乎不想运行ActiveX文档。但是,在他们的程序文件(x86)中有一个IE版本--因此测试(x86)文件夹是否存在;如果不存在,它假设这是一个较低的版本,并使用正常的IE运行。把这个小的可执行文件称为坏消息:您需要购买Advanced来使用它的专业版本,这是从DLL的本机库和任何包含的OCX中提取注册信息所必需的。有一个免费版本的高级安装程序,但它没有这种能力。注意:可能还有其他安装包也会这样做,但是高级安装程序是我唯一知道的。我是Inno的粉丝,但无法用Inno找到任何方法。
  5. 包含了上面2中的所有文件,以及安装包中在3中创建的exe。使用高级安装程序为在3中创建的exe指定一个图标,并使其成为启动程序的快捷方式。
  6. 确保在AppDataFolder\AnyFolderNameHere中安装所有东西(使用安装参数屏幕),而不是ProgramFilesFolder,以绕过Win7和Vista上非常严格的安全问题,更不用说在公司内部网上安装了。

完成所有操作后,由于您的dll已注册,IE应该能够启动您的ActiveX文档。

代码:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3385380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档