请问这个问题怎么解决??????(100分)

  • 主题发起人 主题发起人 明轩
  • 开始时间 开始时间

明轩

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手,在制作一个程序的时候需要启动外部文件
但是外部的文件需要调用他的INI文件才能正常运行
我制作的程序调用它的时候,他提示不能调用它的INI文件,不知道这个问题怎么解决?
如果我把外部程序拷贝到和我做的程序在同目录下,就能正常启动!
另外,我需要启动外部程序比较多,不知道高手大哥们有没有好的方法能够指导小弟的?谢谢了!!!!
 
很显然,是你启动外部程序的时候你调用的外部程序使用的API函数有问题,
我出个偏方,不知道能不能解决,你使用一下调用外部程序的快捷方式看看可不可以。
 
用CreateProcess并指定它的启动路径
 
外部的文件和它需要调用INI文件放在同一个目录即可。
 
阿??晕!大哥们,教教我怎么做阿??
我学这个才3天阿??

fengfan, 时间:2003-3-3 23:35:00, ID:1652675
很显然,是你启动外部程序的时候你调用的外部程序使用的API函数有问题,
我出个偏方,不知道能不能解决,你使用一下调用外部程序的快捷方式看看可不可以。

这位大哥,能说说具体怎么做吗?最好是能给我个源代码!谢谢!!

来自:cnkk, 时间:2003-3-3 23:37:00, ID:1652680
用CreateProcess并指定它的启动路径

还有这位大哥!!!谢谢了!!
 
你用什么启动的?
是用winexec嘛?
其实不管用哪个函数
只要被调用的程序能找到所需的ini文件就能启动程序;
换句话说你的路径存放的有问题;
首先程序1启动程序2时要指定正确的路径(要是在同一个目录下可不必),程序2启动是读取ini时要保证程序2
能找到要读的ini文件,
最简单的方法就是将所有的文件放到一个目录里
 
查查CreateProcess 的 SDK 资料,其中一个参数是指定启动路径的,很容易理解的
 
你单独启动你的Exe文件行不行呢?
我想是你调用的Exe文件在获取Ini的路径时用了当前目录吧
是不是用了GetDir这个函数
外部文件和他要调用的Ini放在同一目录 用以下函数来取得Exe文件的路径即可
你用 ExtractFilePath(Application.ExeName);
 
var
c: array[0..800] of Char;
begin
StrPCopy(c, './…………/××××.exe');
ShellExecute(Application.Handle, 'open', c,nil, nil, SW_NORMAL);

我是这样调用的,和t365说的一样,调用的程序打开后会自动到我制作的这个程序的当前目录找
它所需要的ini文件,但是我上面的参数指定的路径里面有它的ini文件,不用我制作的这个程序
而单独运行那个程序则正常!!后来我用bat文件的call命令测试,既然也是一样,运行不正常!
唉!!!那位大哥帮帮我修改一下上面的代码哈!谢谢了!!
 
应该这样写:
ShellExecute(Application.Handle, 'open', c,PChar(ExtractFilePath(C)), nil, SW_NORMAL);
呵呵,我记不清到底是那个位置了,因为好像上面这个位置可能是参数的,但是必定有一个位置
可以传递启动目录,所以上面这一句不行的话,试试下面这一句:
ShellExecute(Application.Handle, 'open', c,nil,PChar(ExtractFilePath(C)), SW_NORMAL);

 
谢谢了!但是启动后还是和我的那种一样,调用的文件还是没有找到ini文件!!!
还有什么方法吗?我单独运行哪个文件可以正常运行!!!
另外如果可以,请加我QQ,谢谢!!!
390327
 
把那个exe文件的路径加入到搜索路径里试试。
 
closefile(addrtable1);
StrPCopy(c, './.../....exe');
ShellExecute(Application.Handle, 'open', c,PChar(ExtractFilePath(C)), nil, SW_NORMAL);

现在要运行 ./.../...exe文件,这个文件的同目录下有个ini文件,是此文件运行所调用的
我做的这个程序调用它后,它不能成功调用ini文件,运行不正常!但是我单独运行这个没有
问题!!猜想是调用方式不对,不知道还有没有别的运行指令和参数??
有没有高手加加我的QQ阿??谢谢了!!
 
这个你试验一下,应该能行啊
procedure TForm1.Button1Click(Sender: TObject);
var
strFile : string;
begin
strFile := 路径名称;
WinExec (pChar (strFile), sw_ShowNormal);
end;
 
我说的方法应该没有问题,因为PChar(ExtractFilePath(C))这一句的意思就是将c指定的exe
文件所在目录作为exe文件启动目录传递给exe文件的,所以按理exe文件寻找ini的时候是直接
在PChar(ExtractFilePath(C))指定的目录下寻找的,这都是我一直的用法。

你试试修改一下,整个句子为:
//var
// c: array[0..800] of Char;
//不要上面两句,没有必要
begin
//StrPCopy(c, './…………/××××.exe');
//上面这一句也不需要

ShellExecute(Application.Handle, 'open', PChar('/…………/××××.exe'),Pchar(ExtractFilePath('/…………/××××.exe')), nil, SW_NORMAL);
应该没有问题的。
 
要是还有问题,那就不知你这个调用程序的问题了,应该是被调用程序寻找ini文件的问题。建议
查查./…………/××××.exe这个文件的源码,看看有没有什么特殊的参数调用或者其它的e
目录查询方面的错误
 
后退
顶部