还是关于那个"安装完以后运行出现 'file not found' (100分)

  • 主题发起人 主题发起人 xp166
  • 开始时间 开始时间
X

xp166

Unregistered / Unconfirmed
GUEST, unregistred user!
还是关于那个"安装完以后运行出现 'file not found' "的问题
我修改了快捷方式的起始位置,的确好了,但不能让用户修改起始位置啊
还有,我把这个EXE放到了注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
里的"D:/Program Files/xxts/filename.exe"
也会出这个错,这就不能修改起始位置了,我的程序中调用了几个*.ini,我用的是
yourfilename := extractfilePath(application.exename)+'/youfilename.ini'找到的文件路径;
我试了一下,如果用指定的路径,就是"D:/Program Files/xxts/youfilename.ini"就不会出错,
这是为什么呢?
 
extractfilePath(application.exename)返回的是
D:/Program Files/xxts/
所以yourfilename:='D:/Program Files/xxts//youfilename.ini'
所以你要这样
yourfilename:=extractfilePath(application.exename);
i:=length(yourfilename);
if (i>0) and (yourfilename<>'/') then yourfilename:=yourfilename+'/';
yourfilename:=yourfilename+'yourfilename.ini';
因为extractfilepath返回的结果可能跟系统有关,所以这里处理了以下,就可以了
 
我是这样写的
//得到当前目录
NewFileName := ExtractFilePath(Application.ExeName);
//打开FileName.ini文件,读取里面的内容,把内容内容付给变量S
AssignFile(F, NewFileName+'FileName.ini');
Reset(F);
Read(F, S);
CloseFile(F);

//播放FileName.ini里记录的歌曲
MediaPlayer1.filename:=S;
Mediaplayer1.Open;
Mediaplayer1.Play;
 
Application.ExeName本身就是Exe文件名
所以NewFileName := ExtractFilePath(Application.ExeName)就可以了,就是Exe文件的路径
NewFileName+'FileName.ini'一般来讲是没有问题
但最好处理以下:
if (NewFileName<>'') and (newfilename[length(newfilename)]<>'/') then
newfilename:=newfilename+'/';
其他的应该没有问题
对了,是不是应该ReadLn(F,S)??
 
NewFileName := ExtractFilePath(Application.ExeName)是对的,谢谢提醒
但我觉得对
“但最好处理以下:
if (NewFileName<>'') and (newfilename[length(newfilename)]<>'/') then
newfilename:=newfilename+'/';”
做不作处理都无所谓,因为,在安装目录下的EXE执行起来都没有问题,现在关键问题是
快捷方式总不行,好像找不到那几个*.ini的目录
 
你把程序中的原码贴出来,不要现写,你上面的写法应该有不对的。

其实你只要把你的快捷方式指向的程序“绝对路径”写出来,可能就解决了一半问题。
还有你的建立快捷方式是不是在安装过程中进行的,安装时安装程序会
将文件解压到一个临时目录然后再执行,如果这时候建立要小心,因为
这时候的路径是临时的,不是你的目标路径。
 
有不对的?我是直接粘过来的,错在那呢?

建立快捷方式的确是在安装过程里进行的,不这样,那该怎么样

快捷方式指向的程序“绝对路径”是什么意思?是不是就是指向安装目录下EXE的路径,
如果是的话,那就是对的,是指向的安装目录下EXE

 
procedure TForm1.Button1Click(Sender: TObject);
var
iniName: pChar;
begin
GetMem(IniName, 256);
StrPCopy(IniName, ExtractFilePath(Application.ExeName) + 'Test.ini');
WritePrivateProfileString('Common', 'KeyName1', '10', IniName); {写如:“10”}
WritePrivateProfileString('Common', 'KeyName2', 'aaa', IniName); {写如:“aaa”}
FreeMem(IniName);

end;

procedure TForm1.Button2Click(Sender: TObject);
var
iniName: pChar;
l_KeyName1: Integer;
l_KeyName2: pChar;
begin
GetMem(IniName, 256);
StrPCopy(IniName, ExtractFilePath(Application.ExeName) + 'Test.ini');

l_KeyName1 := GetPrivateProfileInt('Common', 'KeyName1', 1, IniName);
ShowMessage(IntToStr(l_KeyName1));

GetMem(l_KeyName2, 256);
GetPrivateProfileString('Common', 'KeyName2', '', l_KeyName2, 256, IniName);
ShowMessage(l_KeyName2);


FreeMem(l_KeyName2);
FreeMem(IniName);
end;
 
to yzhshi
好几个函数都不知道,加点注释吧
:)
 
用右键点击“快捷方式”,点击“属性”,看看“目标”中是什么?
 
目标是"C:/Program Files/xxts/filename.exe"
 
是安装程序产生的?正确吗?你想设定的是什么?
 
ExtractFilePath(Application.ExeName)该函数返回的是当前程序的绝对目录,但是有
一种情况他会改变,那就是你在任何应用程序中利用OPenfile系统对话框后将会改变为
你上次打开文件的路径,同时还和你的快捷方式的起始位置有关,如果你在快捷方式的
属性里安查找目标而找不到实际文件时,那肯定是不行的!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
534
import
I
I
回复
0
查看
676
import
I
后退
顶部