首先程序
Private Sub Form_Load()
    If GetPrivateProfileInt("Set", "RegisterStart", 0, App.Path & "\ConFig.ini") = 0 Then
        Shell "Regsvr32.exe " + App.Path + "\hmButton.ocx /s"
        WritePrivateProfileString "Set", "RegisterStart", "1", App.Path & "\ConFig.ini"
    End If
End Sub
.
上面一条是软件第一次运行时把相关的ocx文件注册一下过程。这样做的好处是不用每次启动都注册一下,搞花注册表。但也是有一个问题,假如放程序的文件夹发生了移动的话(如C盘去到了D盘)那么这样注册ocx的文件位置就会出现报错了。因此我想做一个假如发现ocx的注册文件位置改变的话,就再重新注册一次,不知到有否这样的办法与思路呢?

解决方案 »

  1.   

    想到相关方法了,可惜出了问题,求高人解决。
    首上面的问题可以在第一次启动软件时加上
    WritePrivateProfileString "Set", "StartAddress", App.Path, App.Path & "\ConFig.ini" 
    把地址记下来,然后再读取数据出来比较现在的App.Path是否相同,即找到是否有改变过目录
    但我实际操作上完整的读取数据格式为下面这样. 
    Dim EmMyG As String 
    EmMyG = String(255, 0) 
    GetPrivateProfileString "Set", "StartAddress", "0", EmMyG, 256, App.Path & "\ConFig.ini" 
    但我发觉这样一来 EmMyG 这个变量变得很奇怪,即使如下面: 
    用 If EmMyG <> App.Path Then 这样的比较,明明用msgbox EmMyG , , App.Path 显示两者内容一样,但但都是通过了Then(也就是成立了两数据不对)
    而且MsgBox EmMyG & vbCrLf & "\dsffffffffgdsfgdsa" 
    但实际上 "\dsffffffffgdsfgdsa" 这一段会没有显示出来,因此可能是 EmMyG 这个变量变奇怪了,但是我找不到方法解决... 
      

  2.   

    =.=别注册...程序会自动找目录下的OCX.....
    我一直是这么做的...哈...
      

  3.   

    第三方的ocx控件要注册啊....奇怪了....明明我在虑拟机上测试时,要注册才可以运行我的程序.....
      

  4.   

    那你可以在form_load加上几句
    On Error Resume Next
    if err<>0 then
         Shell "Regsvr32.exe " + App.Path + "\hmButton.ocx /s"
    end if
    err.claer