JclAppInstances を使用してアプリ インスタンスを制御しようとしています。プロジェクト設定でファイル バージョンを変更しない限り、問題なく動作します。JclAppInstances をアプリ ファイルのバージョンに依存しないようにして、バージョンが異なっていてもユーザーがアプリケーションの複数のコピーを起動できないようにする方法は?
1 に答える
私が知る限り、あなたが話しているクラスはアプリケーションのバージョンを気にしません。アプリケーションパスに基づいていますが、一意のアプリケーション ID を自分で指定していない場合のみです。
このTJclAppInstances.InitData
メソッドは、次のコードを使用して内部アプリケーション ID を初期化します。
if ExplicitUniqueAppId <> '' then
FUniqueAppID := JclAIPrefix + ExplicitUniqueAppId
else
FUniqueAppID := AnsiUpperCase(JclAIPrefix + ParamStr(0));
ExplicitUniqueAppId
空で始まるグローバル変数です。他の値に設定されていない場合は、コードがParamStr(0)
アプリケーション ID の設定に使用されていることがわかります。ParamStr(0)
アプリケーションのフル パスとファイル名を返します。プログラムの複数のバージョンがインストールされている場合、それらは異なる場所にある必要があります。そのため、プログラムがアプリケーションのバージョンを気にしているように見えます。実際には、それらが異なる場所にあるだけです。特定のバージョンは関係ありません。
ExplicitUniqueAppId
空でない値に設定するには、引数が 1 つのバージョンの を呼び出すJclAppInstances
必要があります。パラメーターはアプリケーション固有の GUID ( IDE でCtrl+ Shift+Gを押して生成できます) であると想定されますが、アプリケーションを一意に識別する限り、実際には選択した任意の文字列にすることができます。