因为我的工程在安装过程中,除了将文件复制到目的地外,还需要创建数据库及在库中设置一些初始化数据。因此在用 Setup Factory 打包时,需要其调用外部的函数来完成这些工作,但是在 Setup Factory 的 Actions(动作)中,可以 “Call Dll Function”,但其好像并不支持 VB 开发的 DLL,不知道是否确实是这样?各位是否有过类似的需求(即,在 Setup Factory 如何执行 VB 的代码,如果是能直接执行 VB 的语句更好;如不行,则是否能够调用 VB 编的 DLL)?

解决方案 »

  1.   

    楼上的,问题是如何在 Setup Factory 中如何调用这些外部功能?
      

  2.   

    楼主应该把要执行的操作做成一个exe 文件,然后所有的操作,错误处理,判断等都在exe里面完成,也就是说只要这个exe就可以完成你要的操作,然后在sf里面调用这个exe就好了!!!!!!!!!!!!
      

  3.   

    楼主不应该想用 安装程序取调用 dll 配合你完成环境的构建,安装程序尽可能的只完成程序的部署,至于程序运行的附加环境,应该考虑另写exe完成,用安装程序调用该exe完成,这样会自由很多,毕竟exe你自己编写起来要顺手的多。
      

  4.   

    To:卖女孩的小火柴~你的建议有一定的道理。但是,如果一次安装即把所有设置什么的全部搞定岂不更好。免得要先安装,然后又运行什么设置程序,这样的话,傻瓜用户会觉得繁琐。为什么要是调用 DLL 而非 EXE 呢。如果是 DLL 的话,那 SF 对它是调用的关系,调用完毕之后还会有返回值,这样控制权还是在 SF 中,而且 SF 可以根据返回值来做出相应的安装界面等等动态调整。这样还是在一个集成的安装程序之中;但如果是 EXE,则不行了,分散了,且其于 SF 之间的变量传递及不方便。难道是 SF 中就是不能调用 VB's DLL 吗?
      

  5.   

    呵呵,楼主可以在安装的过程中调用exe啊,比如在安装程序部署完成,出现安装完成界面之前,调用可执行文件,完成环境的部署,这时sf等待被执行的文件退出,被执行文件退出以后在继续执行。这个是安装里面很常用的功能啊,比如我们在安装设置数据库软件的时候,在退出安装程序之前调用微软的mdac_type.exe啊,这个时候数据组件在安装,而安装程序在等待数据组件安装完成,然后才继续执行咯。
      

  6.   

    如:File.Run(SessionVar.Expand("%TempLaunchFolder%\\mdac_typ.exe"), "", "", SW_SHOWNORMAL, true);
      

  7.   

    不好意思,上面贴的是 sf7的代码
    楼主可以在action里面的 After Installing 里面Open/Close programs -> Execute FileWait for program to finish running before continuing  打勾
      

  8.   

    To:卖女孩的小火柴~我明白你的意思。但是执行 EXE 很难达到我的目的。因为在调用者和被调用者之间,需要有数据传递,并且调用完毕之后需要返回结果值。而对于 EXE 只能简单的执行关系,如要实现调用者/被调用者之间的数据交流,恐怕只能通过读/写外部的文件或注册表来完成,而且 EXE 还需要是被同步地执行(正如 VB 安装程序时执行 mdac_typ.exe 一样),不能是异步执行。因此,我很需要是在安装过程中调用 DLL。但到现在,关于 SF 是否能调用 VB's DLL 的问题尚未明确。谢谢 卖女孩的小火柴~