【发布时间】:2015-08-18 10:53:50
【问题描述】:
我已经制作了一个 exe (Update.exe) 文件来通过 SQL 语句更新表中的记录。
我制作了另一个程序 (update_service.exe),它在 windows 中作为管理服务运行。
当我独立运行 update.exe 时,它会更新表中的记录。没有错误。它有效。
当 update.exe 通过 update_service.exe 执行时,它会给我一个访问冲突:
Access violation at address 40006A2F in module 'rtl60.bpl'. Read of address 00000004.
发生错误的操作系统是W2003服务器。
德尔福第 6 版
数据访问组件:ADODB
这是一个 VCL 应用程序
在我本地的 W7 PC 上一切正常。
代码:
procedure TService1.tmr1Timer(Sender: TObject);
var
LclParams : string;
begin
if (FBusyUpgrading) or (UpgradeFileExists()) then
Exit;
if HourOfTheDay(Time) = HourOfTheDay(strToTime(FStartServiceTime)) then
if MinuteOfTheHour(Time) = MinuteOfTheHour(strToTime(FStartServiceTime)) then
begin
FBusyUpgrading := True;
WinExecAndWait32(IncludeTrailingBackslash(GetCurrentDir) + 'update.exe /START', SW_NORMAL);
FBusyUpgrading := False
end;
end;
我该如何解决这个问题?
FWIW:用于更新的 SQL 语句:
sl.Add('UPDATE Licentie SET ExpiratieDatum=' + QuotedStr(LicenseKey.Expiratie) + ' WHERE Active=True')
(LicenseKey.Expiratie 为普通字符串)
【问题讨论】:
-
update.exe 从带有 /START 参数的 ide 启动时发生了什么?你可以使用菜单 Run > Parameters ?.
-
Update.exe 是一个什么样的应用程序?您绝对不能从服务中生成交互式应用程序,实际上我不相信您可以从服务中生成 任何 外部应用程序 - 如果可以,则仅受您使用的服务帐户的用户权限的限制。
-
Update.exe 是一个普通的 delphi 应用程序。我可以通过日志文件看到应用程序正在运行。只有更新语句给出了访问冲突。运行 update.exe(不是通过服务)时,它可以正常工作。
-
您能否提供有关 LicenseKey.Expiratie 的更多详细信息?它可能是具有从文件或注册表读取的 getter 方法的属性吗?
-
LicenseKey.Expiratie 只是一个字符串属性