やりたい事
- アプリを開いたら、アップデートがあるか確認する
- アップデートがあれば、自動でアップーデートを開始する
- アプリを再起動する
それでは、いってみよう!
アプリを開いたら、アップデートがあるか確認する
hogehoge.spec
・・略
exe = EXE(pyz,
Tree('version',prefix='version'), # 追加
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='hogehoge_mac',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
versionを追加して、exeを作っておく事。
versionディレクトリの下に、system.jsonをおく
system.json
[
{
"version": "1.9"
}
]
# バージョンチェック
if common.system["version"] != str(common.information[0].system_version):
作っておいたバージョンとデータベースのバージョンを比較する
jsonの読み込みやデータベースからの取得は割愛ね。
アップデートがあれば、自動でアップーデートを開始する
# ダウンロード
file_size = 50029115
res = requests.get(self.url, stream=True)
pbar = tqdm(total=file_size, unit="B", unit_scale=True)
with open(self.save_name, 'wb') as file:
for chunk in res.iter_content(chunk_size=1024):
file.write(chunk)
pbar.update(len(chunk))
pbar.close()
自動アップデート、tqdmでダウンロードすると、見た目が良い感じです。
ポイントは、save_nameをexeとは違う名前で保存します。
アプリを再起動する
# バッチ実行
command = "rename.cmd " + self.save_name + " " + self.rename_name + " " + self.delete_name
subprocess.Popen(command.split())
ダウンロードが終わったら、バッチをキックして、バッチの中で、ファイルの削除とリネームとアプリ起動を行う。
# rename.cmd
taskkill /im %2 /F
timeout 2
del /f %3
timeout 2
rename %1 %2
%3
動いてたプロセスを念のため切ります。
アップデート前のファイルを削除します。
アップデート後のファイルをリネームします。
再起動します。
まとめ
- 今のバージョンをjsonで持っておく
- 最新バージョンをデータベースに持っておく
- pythonでダウンロードする
- バッチでリネームする
python内では、今動いるアプリの名前を変えることは出来ないので、バッチをキックする必要がある。