function CovFileDate(Fd: _FileTime): TDateTime;
var
  Tct:_SystemTime;
  Temp:_FileTime;
begin
  FileTimeToLocalFileTime(Fd,Temp);
  FileTimeToSystemTime(Temp,Tct);
  Result:=SystemTimeToDateTime(Tct);
end;取文件修改时间:
function GetFileModifyDate(fdt: TFileDateType;
  fileName: string): TDateTime;
var
  Tp:TSearchRec; { 申明Tp为一个查找记录 }
begin
  FindFirst(fileName,faAnyFile,Tp); { 查找目标文件 }
  Result:= CovFileDate(Tp.FindData.ftLastWriteTime);
  FindClose(Tp);
end;单机程序调用没有任何问题,能够正确取到文件的修改时间,
可在windws服务程序中调用返回的却是"1860-01-01"的时间.
百思不得其解 请各位大侠帮忙分析一下。

解决方案 »

  1.   

    format一下转成字符传回来看看
      

  2.   

    我看存到数据库里的不对,
    格式化成字符串后show出来也是这样不对的。
      

  3.   

    试试下面的看看var
      SR: TSearchRec;
      FT: tdatetime;
      tmp: _filetime;
      tmpsys: _systemtime;
    begin
    // ....
      FileTimeToLocalFileTime(SR.FindData.ftLastWriteTime,tmp);
      FileTimeToSystemTime(tmp,tmpsys);
      FT:= SystemTimeToDateTime(tmpsys);
      memo1.Lines.Append(formatdatetime('YYYY-MM-DD HH:MM:SS',FT));
    end;
      

  4.   

    多谢楼上的。。多种方法我都试过。。
    都一样的 服务器时间也正确。。
    而且在服务器上运行单机程序能正确获取
    做成windwos服务就不行了
      

  5.   

    我也在SVC里测试了一下,确实返回错误的时间.LZ如果不觉得麻烦的话,迂回一点,SVC调用一小程式,读取写入文本,然后退出. 
    约定一定时间隔(几秒),然后SVC读取文本再处理..
      

  6.   

    datetimetostr(FileDateToDateTime(fileage(WorkPath+'\ClassDate.db'));
      

  7.   

    service是运行在某个用户权限下的,如果此权限不足以访问(至少要有读取扩展属性权限)某些驱动器、目录、文件... 就取不到时间。
      

  8.   

    windows本地服务localsystem帐户默认对本地操作系统具有最高操作权限,但是却不能对网络资源访问。
    网上找了下,要访问网络资源用以下几种方法:
    1.给服务指定适合的账户运行
    2.映射盘WinAPI:WNetAddConnection2
    3.模拟用户WinAPI:LogonUser
    第一种方法试了可行,不过我希望在本地系统帐户下运行,这样才可以与桌面进行交互。换其他的用户好像不行了。
    第二种方法测试了下,在本地系统帐户下映射失败,getlasterror是1312。其他帐户下映射没问题,访问也不问题
    第三种方法,没测试成功,用法不是很清楚各位大神请指点下。
      

  9.   

    不要用local service帐户,用system帐户启动服务,与桌面交互的部分单独写一个程序,服务中用CreateProcessAsUser启动它。
      

  10.   

    用的就是system帐户,该帐户确实不能访问网络资源。