怎样取得程序本身的编译日期(50分)

  • 主题发起人 主题发起人 Jao
  • 开始时间 开始时间
J

Jao

Unregistered / Unconfirmed
GUEST, unregistred user!
程序可能会被别人拷来拷去,程序名也可能被改动,所以不能用写定路径
和文件名的方法取得。
 
为什么不可以? 用application.exename就可以得到目前程序的名字,然后
读取他的版本号, 读取方法见 139289 贴子.
 
编译日期也能?我试试
 
你的程序里设个“机关”,在编一个小工具,只有你才能拥有,这样别人干的事情
还能逃过你的眼睛?!
 
http://vcl.vclxx.com/DELPHI/D32FREE/FVERSION.ZIP
 
搞错! 原来不是版本, 是文件日期.

不过一样, 得到application.Exename, 然后读取它的日期.
 
老大呀,EXE的日期改了怎么办呀?
 
看来只好作为资源编译到exe里面了.
 
可以在版本声明中写上创建日期呀. 如memo中.
 
定义一个全局变量存储编译日期。
Project|Options|FileVersion中确实没有编译日期,所以不如自己加一个。
 
能读出来FileVersion的内容???
 
文件的最后修改日期(不是创建)应该可以吧(我猜的)
 
Project|Options|FileVersion中确实没有编译日期,但版本信息
是可以增加内容的。在grid的最后按向下键,grid会自动添加
一行,可以键入自己定义的版本信息类型。如CompileDate,
这样就可以记录编译日期了。编译程序,察看执行文件的属性,
可以再版本页中见到自定义的信息。当然,用程序也可以读取。
 
这是我的BCB 4源程序,诸位不妨探讨一下:
void TForm1::Buildingtime()
{
AnsiString Srcfilename;
Srcfilename="Pigeon_c.cpp"
//这是我的源程序文件名
if(FileExists(Srcfilename))
{
Label36->Caption="Build "+IntToStr(FileDateToDateTime(FileAge(Srcfilename)));
//这一句存在问题:他的返回值是一个古怪的数值,根本就不是Srcfilename的日期
//最终显示 “Build 36749 ”,让我费解!
}
else
}
诸位是如何实现的?我的这句错在哪里?
 
本人意见,要实现记录编译日期,有两种方法:人工及自动(某人:简直是废话!)
……还有人要听吗?

人工方法就是象各位上面说的了,例如读取EXE文件的日期啦、在版本信息里增加一项编译
日期的记录、在程序中写入编译日期等等。但这些方法虽然简单,但并不能达到最佳效果,
且有不少弊病。如用读取EXE文件日期的方法,如果文件日期被改动了,读出的“编译日期”
就不是正确的;至于用增加版本信息及硬编码日期的方式,又不方便,这么做的话,岂不是
每次编译之前都要去修改。

至于“自动”的方法,其实很简单。各位不都是用的Delphi吗?它具有可扩展其IDE的功能,
就是Expert啦。我们可以写一个<B>自动在编译时在程序中写入编译日期</B>的Expert,在
该Expert中创建一个TIAddInNotifier对象,该对象有一个EventNotification过程,在IDE
编译我们的源程序之前,会调用该过程,并将该过程的一个参数NotifyCode的值设置为
enBeforeCompile。由于该过程是virtual兼abstract,也就是说我们必须自己实现它,这样
就可以在我们自己实现的EventNotification过程中,当接收到NotifyCode为enBeforeCompile
时在源码中的某个地方插入(或者修改事先定义的)一个常量/变量,并把其值设置为当前的
日期和时间,例如:
Const // 用var也行
CompileDateTime: string = '2000-8-20 18:00';
然后在程序中需要显示编译日期的地方使用这个常量/变量。注意,我的意思是在即将编译
之前<B>修改源码</B>。

这种方法我个人认为是比较好的方法,只需写一个Expert就能一次性解决问题,而且所记录
的编译日期也是很准确的。

不知各位以为如何呢?
 
Zephyr,可不可以贴个源代码出来?
 
不需要代码了,我昨晚在网上找到一个现成的,效果不错,它使用的方法和我的想法差不
多,只是它用的是包含文件(*.inc文件),也是定义一个包含编译时间的常量。你可以去
<a href="http://www.torry.ru/">Torry's Delphi Pages</a>
瞧瞧,或者直接从这里下载:<a href="http://www.torry.ru/vcl/experts/other/cmptime4.zip">
For D4</a>
<a href="http://www.torry.ru/vcl/experts/cmptime5.zip">For D5</a>
 
你想取得自己的程序编译日期还是别人的程序的编译日期?
 
接受答案了.
 
后退
顶部