我用VB自带的打包程序进行打包,我修改了安装程序,并且加入了一个检查文件版本的功能,实现如果检查到某个文件不存在就调用一个安装该文件的安装程序,如:检查到Directx的版本不对就会自动加载Directx的安装程序。    我先说一下我这几天研究VB自带的打包程序的一些心得(不一定是正确的):VB的这个打包程序共分为三部分:setup.exe,setup1.exe,ST6UNST.EXE。其中setup.exe 和ST6UNST.EXE是我们不能控制的,只有setup1.exe是可以通过编程修改的(如加上背景图片等等)。当开始安装是点击setup.exe,setup.exe就会把setup1.exe和相应的.CAB复制到系统目录(如:c:\winnt),从系统目录里执行相应的setup1.exe。现在我的安装包的路径为D:/setup(也可以是其他的),并且在D:/setup/dx文件下有一个DxSetup.exe的安装包,我想实现在运行setup1.exe时,检查irectx的版本,如果不符合要求,就加载DxSetup.exe的安装程序。版本检查我已经实现了,现在问题是:由于运行的setup1.exe的当前路径是在系统目录下,而不是D:/setup下,那DxSetup.exe的安装路径就无法确定,也就无法执行。我也想过用搜索文件路径的方式查找到DxSetup.exe并进行安装,可这样的话效率太差了。
请问:有什么方法可以解决我的问题?
(不知道我说清楚了没有,谢谢!!)(其实我也不想用VB自带的打包程序,可是这是老板要求的,我能说什么呢?)

解决方案 »

  1.   

    setup1.exe的当前路径是在系统目录下,而不是D:/setup下,那DxSetup.exe的安装路径就无法确定,也就无法执行那你这样获取系统目录试试行不行Private Declare Function GetWindowsDirectoryA Lib "kernel32" _
       (ByVal lpBuffer As String, ByVal nSize As Long) As Long'************************************************************
    '得到windows得系统目录
    Private Function GetWindowsDirectory() As String
       Dim s As String
       Dim i As Integer
       i = GetWindowsDirectoryA("", 0)
       s = Space(i)
       Call GetWindowsDirectoryA(s, i)
       GetWindowsDirectory = AddBackslash(Left$(s, i - 1))
    End FunctionPublic Function AddBackslash(s As String) As String
       If Len(s) > 0 Then
          If Right$(s, 1) <> "\" Then
             AddBackslash = s + "\"
          Else
             AddBackslash = s
          End If
       Else
          AddBackslash = "\"
       End If
    End Function
    '************************************************************Private Sub Command1_Click()
        MsgBox GetWindowsDirectory()
    End Sub
      

  2.   

    那就用setup factory 吧,使用起来很简单
    http://vbeden.xg88.com/download/software/sf6.zip解压密码
    www.vbeden.com