ネイティブ拡張 (air Updater クラスではサポートされていないネイティブ署名済みインストーラー) を使用する AIR デスクトップ アプリケーションの自動サイレント アップデートを作成する必要があります。完全に機能するアプリケーションを起動し、
taskkill /IM Project.exe
taskkill /IM adl.exe
wmic product where name="Project" call uninstall /nointeractive
"%HOMEPATH%\AppData\Roaming\com.Project\Local Store\Project.exe" -silent -eulaAccepted -location "\"%PROGRAMFILES(X86)%\" -desktopShortcut
"%PROGRAMFILES(X86)%\Project\Project.exe"
taskkill /IM cmd.exe
私はそれを実行する Java プログラムを作成しましたが、それも正常に動作し、予想よりもさらに優れています。cmd も表示されず、完全にサイレントです。
try {
String ls_str;
Process ls_proc = Runtime.getRuntime().exec("Bat/update.bat");
// get its output (your input) stream
DataInputStream ls_in = new DataInputStream(
ls_proc.getInputStream());
try {
while ((ls_str = ls_in.readLine()) != null) {
System.out.println(ls_str);
}
} catch (IOException e) {
System.exit(0);
}
} catch (IOException e1) {
System.err.println(e1);
System.exit(1);
}
しかし、この Java ソリューションを実際に実装することはできません。AIR はそれをサポートしていません。
だから私は.batファイルを起動するネイティブ拡張機能を作りました, それは動作します,
system("cmd /C \"%HOMEPATH%\\AppData\\Roaming\\com.Project\\Local Store\\update.bat\"");
しかし、この方法には 2 つの問題があります。
- CMD は開いたままです。
- ソフトウェアの最後のバージョンはバックグラウンドでフリーズしたままなので、bat ファイルはそれを閉じていません...
ソフトウェアの新しくインストールされたバージョンを閉じるとすぐに、これらすべてが消えます...
では、Java プログラムを改善し、実装する方法を見つける必要がありますか? または、ネイティブ拡張機能を使用するより良い方法はありますか?
誰でもこれで私を助けることができますか? 前もって感謝します
編集
今のところ、バッチ ファイルを実行する単純な vbs ファイルを使用しています。
CreateObject("Wscript.Shell").Run "update.bat",0,True
ネイティブ拡張を介してvbsを起動します。これは静かな良い結果ですが、実行中に非表示にしたい空のcmdがあります...かなり疲れる回避策です...
しばらくはこれで作業できますが、本当に改善したい..