5

アプリケーションを使用しているユーザーがたくさんいます。ただし、サーバーに配置した更新を実行した場合、すべての更新を喜んで行うわけではありません(慣れたくない変更を恐れることがあります)。

だから私は、彼らに最新のアプリケーションを起動させる方法を推測します。確かにいくつかの方法がありますが、データベースのblobフィールドに格納されているアプリケーションを起動できると聞いています。

誰かがそれをどのように達成できるか知っていますか?(私はMySQLデータベースを使用しています)

ありがとう

4

2 に答える 2

6

意味があるかナンセンスかを判断せずに.... uExecFromMem
を使用できます..... このユニットには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;
于 2013-01-08T06:55:09.743 に答える
2

私のアドバイスは、ライブラリを使用することです。

小さなメインの実行可能ファイル (ある種の「ランチャー」) を持つことができます。これは何もせず、外部.dllフィールドを起動します。カーネルが実行時にモジュールをロードするのと同じように(Windows や Linux がどのように動作するかを考えてみてください)。

次に、更新されたバージョンの をダウンロードし.dll、古いバージョンを停止してアンロードし、新しいバージョンをロードして初期化します。

もちろん、コードは「クリーン」で、それぞれに適切な起動およびシャットダウン機能が必要.dllです。

しかし、それよりもエラーが発生しにくいと思いますExecuteFromMem()。この点で、古き良き.exeファイルの読み込みと実行 (レミーが提案したように) は、私にとってはるかに優れたオプションのように思えます。

于 2014-08-12T08:04:23.600 に答える