Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 从数据库启动应用程序_Delphi - Fatal编程技术网

Delphi 从数据库启动应用程序

Delphi 从数据库启动应用程序,delphi,Delphi,我有很多用户在使用我的应用程序。但是,如果我在服务器上进行一些更新,并不是所有人都愿意更新(他们有时害怕自己不想习惯的更改) 因此我推测,如何迫使他们推出最新的应用程序。当然有几种方法可以做到这一点,但我听说,可以启动存储在数据库blob字段中的应用程序 有人知道怎样才能做到吗?(我正在使用MySQL数据库) thanx没有对有意义或无意义进行判断…. 您可以使用…… 此单元中有一个Memoryleak,可通过添加以下内容来修复: ResumeThread(PI.hThread); Re

我有很多用户在使用我的应用程序。但是,如果我在服务器上进行一些更新,并不是所有人都愿意更新(他们有时害怕自己不想习惯的更改)

因此我推测,如何迫使他们推出最新的应用程序。当然有几种方法可以做到这一点,但我听说,可以启动存储在数据库blob字段中的应用程序

有人知道怎样才能做到吗?(我正在使用MySQL数据库)


thanx

没有对有意义或无意义进行判断….
您可以使用……
此单元中有一个Memoryleak,可通过添加以下内容来修复:

  ResumeThread(PI.hThread);
  Result := PI.hThread;
  FreeMem(pFile);  // added here
end; 
使用TBlobField的调用示例如下

var
 ms:TMemoryStream;
begin
    ms:=TMemoryStream.Create;
    try
    TBlobField(YouDBBlobField).SaveToStream(ms);
    ms.Position := 0;
    ExecuteFromMem(Application.ExeName,'',ms.Memory); // pointing to an existing executable
    finally
      ms.Free;
    end;
end;

我的建议是使用图书馆

您可以有一个小的主可执行文件(某种类型的“启动器”),它除了启动外部
.dll
字段之外什么也不做。就像内核在运行时加载模块一样(想想Windows或Linux是如何工作的)

然后下载
.dll的更新版本,停止并卸载旧版本,然后加载并初始化新版本

当然,您的代码必须是“干净的”,每个
.dll都有正确的启动和关闭功能


但我怀疑它比
ExecuteFromMem()
更不容易出错。在这方面,对我来说,加载并执行
.exe
文件(正如Remy建议的那样)是一个更好的选择。

为什么要将
TMemoryStream
复制到一个单独的字节数组中,而不是将
ms.Memory
传递到
ExecuteFromMem()
?通过复制数据,您正在复制内存中的可执行文件,这是一种浪费。此外,
ExecuteFromMem()
的工作原理是,在挂起状态下为
ExistingDummy.exe
启动一个新进程,用输入数据覆盖其内存,然后恢复该进程。我认为UAC和DEP技术不能很好地发挥这一作用,尤其是UAC,它只在流程创建时调用。最安全的选择是简单地将
TMemoryStream
数据写入一个临时
.exe
文件,然后正常执行。@RemyLebeau我在这两点上都同意你的观点。我从来不需要这样的要求。到目前为止,我无法检测到UAC和DEP的问题。我只是为了兴趣(概念证明)而尝试。@bummi如何在XE4中使用该单元。。它也是64位兼容的吗?@user2665920我不希望它能与64位兼容。正如上面的评论所提到的,我只是出于兴趣而尝试,也许是雷米的命令
。。。将TMemoryStream数据写入一个临时的.exe文件,然后正常执行它。
将更有用。+1此解决方案更干净,最有可能在windows 9之外工作