我在桌面上执行一个应用程序,运行正常,但用pb中调用run("***.exe")运行是出错,提示是少了某些dll文件

时间:2022-04-06 23:46:35
我在桌面上执行一个应用程序,运行正常,但用pb中调用run("***.exe")运行是出错,提示是少了某些dll文件,单独执行时,会包含其他的目录,但用run("***.exe")不包含其他的目录。

11 个解决方案

#1


将这些DLL拷到PB目录下试试!

#2


如果是PB7.0,需要拷贝libjcc.dll.pvvm70.dll到你的应用程序所在的目录.使用了数据窗口的话,还需要拷贝pbdwe70.dll,使用了数据库的话,拷贝相应的数据库接口,如ODBC是pbodb70.dll

#3


这也是一种方法,api函数有设置当前目录,有没有一个函数执行*.exe还包含其他目录

#4


专门的打包程序

#5


我知道运行exe的api函数

Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
lpCmdLine String,包含要执行的命令行 
nCmdShow Long,定义了以怎样的形式启动程序的常数值。

但不知道能不能解决你的问题。

#6


你可以使用microsoft的depends看看需要什么dll,然后把这些DLL copy到你的目录下,保证可以

#7


copy数据库接口还是不行,为什么?

#8


有的程序程序在桌面的快捷方式里都有它的运行起始位置,所以在用其它程序运行它里就要把当前目录设成它的起始位置才能正常。你可以这样
先调用api函数
FUNCTION boolean SetCurrentDirectoryA(ref string cdir)&
LIBRARY "Kernel32.dll"

然后:
 string cdir,filename,curdir
 cdir="C:\Program Files\report\pbreport\"//程序起始位置
 abc=SetCurrentDirectorya(cdir)
 filename=cdir+"program.exe"//要运行的软件名
 run(filename)
 setcurrentdirectorya(curdir)//把当前的目录再设回来,curdir的值你可以用另外的一个函数getcurentdirectorya来取

#9


Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

返回值:Long,大于32表示成功

参数:
lpCmdLine String,包含要执行的命令行 
nCmdShow Long,定义了以怎样的形式启动程序的常数值。 

#10


如果你同样的语句可以运行其他的exe程序的话,就是你要运行的程序需要其他的dll支持可他们不在搜索路径内。把那些dll和exe放在一个目录试试。

#11


同意楼上的!

#1


将这些DLL拷到PB目录下试试!

#2


如果是PB7.0,需要拷贝libjcc.dll.pvvm70.dll到你的应用程序所在的目录.使用了数据窗口的话,还需要拷贝pbdwe70.dll,使用了数据库的话,拷贝相应的数据库接口,如ODBC是pbodb70.dll

#3


这也是一种方法,api函数有设置当前目录,有没有一个函数执行*.exe还包含其他目录

#4


专门的打包程序

#5


我知道运行exe的api函数

Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
lpCmdLine String,包含要执行的命令行 
nCmdShow Long,定义了以怎样的形式启动程序的常数值。

但不知道能不能解决你的问题。

#6


你可以使用microsoft的depends看看需要什么dll,然后把这些DLL copy到你的目录下,保证可以

#7


copy数据库接口还是不行,为什么?

#8


有的程序程序在桌面的快捷方式里都有它的运行起始位置,所以在用其它程序运行它里就要把当前目录设成它的起始位置才能正常。你可以这样
先调用api函数
FUNCTION boolean SetCurrentDirectoryA(ref string cdir)&
LIBRARY "Kernel32.dll"

然后:
 string cdir,filename,curdir
 cdir="C:\Program Files\report\pbreport\"//程序起始位置
 abc=SetCurrentDirectorya(cdir)
 filename=cdir+"program.exe"//要运行的软件名
 run(filename)
 setcurrentdirectorya(curdir)//把当前的目录再设回来,curdir的值你可以用另外的一个函数getcurentdirectorya来取

#9


Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

返回值:Long,大于32表示成功

参数:
lpCmdLine String,包含要执行的命令行 
nCmdShow Long,定义了以怎样的形式启动程序的常数值。 

#10


如果你同样的语句可以运行其他的exe程序的话,就是你要运行的程序需要其他的dll支持可他们不在搜索路径内。把那些dll和exe放在一个目录试试。

#11


同意楼上的!