アプリケーションを使用しているユーザーがたくさんいます。ただし、サーバーに配置した更新を実行した場合、すべての更新を喜んで行うわけではありません(慣れたくない変更を恐れることがあります)。
だから私は、彼らに最新のアプリケーションを起動させる方法を推測します。確かにいくつかの方法がありますが、データベースのblobフィールドに格納されているアプリケーションを起動できると聞いています。
誰かがそれをどのように達成できるか知っていますか?(私はMySQLデータベースを使用しています)
ありがとう
アプリケーションを使用しているユーザーがたくさんいます。ただし、サーバーに配置した更新を実行した場合、すべての更新を喜んで行うわけではありません(慣れたくない変更を恐れることがあります)。
だから私は、彼らに最新のアプリケーションを起動させる方法を推測します。確かにいくつかの方法がありますが、データベースのblobフィールドに格納されているアプリケーションを起動できると聞いています。
誰かがそれをどのように達成できるか知っていますか?(私はMySQLデータベースを使用しています)
ありがとう
意味があるかナンセンスかを判断せずに.... 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;
私のアドバイスは、ライブラリを使用することです。
小さなメインの実行可能ファイル (ある種の「ランチャー」) を持つことができます。これは何もせず、外部.dllフィールドを起動します。カーネルが実行時にモジュールをロードするのと同じように(Windows や Linux がどのように動作するかを考えてみてください)。
次に、更新されたバージョンの をダウンロードし.dll、古いバージョンを停止してアンロードし、新しいバージョンをロードして初期化します。
もちろん、コードは「クリーン」で、それぞれに適切な起動およびシャットダウン機能が必要.dllです。
しかし、それよりもエラーが発生しにくいと思いますExecuteFromMem()。この点で、古き良き.exeファイルの読み込みと実行 (レミーが提案したように) は、私にとってはるかに優れたオプションのように思えます。