いつもご回答いただきありがとうございます。
ネットワークをつかたった処理をする常駐プログラムで、一定間隔でPOSTします。POST先には自作のCGIが待っています。
起動時に特別なリクエストをするなどして自分よりも新しいプログラムが出来上がっているかを確認することはできます。
ダウンロードも過去ログなどを見ていけばできそうです。
しかし、インストールするにはどうしたらいいでしょうか?
インストーラは通常.msiを使っています。
(exeだけでもいいのですが今後大幅なバージョンアップなどがあって追加DLLのことや、インストーラを使っているのに勝手に変更してもいいものなのかと・・・)
プログラム的にshellなどで実行すればインストール画面を出すことはできると思うのですが、できればサイレントで自動的に更新するように仕掛けたいと思います。
なにかいい方法をご存知でしたら、お知恵を拝借させてください。
VB6sp6/WinXPsp2
(プログラムの対応確認OSは2000sp4/Me/XpSP1と2です)
(プログラムはwindows installerをつかっています)
(マージモジュールなどを抜けばDll1個とexe1個だけのプログラムです)
追加なんですが
イメージ的にはNortonAntivirus2004の自動更新ような「更新しました」だけ表示するようなこと(更新したことだけを通知し、ユーザの操作を必要としない)ができれば・・・と考えています。
よろしくお願いいたします。
そこまで出来ているなら、あとはクライアントの仕様では?
ダウンロードしたファイルをコピーするだけの仕様にするとか。
レスありがとうございます
実行中の自exeを上書きすることはできないんじゃないでしょうか?
「windowsが使っています」とかエラーが出た気がします。
それともアップデート用のプログラムを別途作る必要があるでしょうか?
->メインexeから呼び出され、メインは終了
->メインexeをダウンロードしたもので上書きして
->メインを呼び出しアップデートプログラムは終了?
エラーは出ると思う。
自分をアップデートするにはその方法でやるのが簡単だと思う。
>プログラム的にshellなどで実行すればインストール画面を出すことはできると思うのですが
リモート起動の話しですよね?
Shellではできないと思いますよ。
フォルダを共有にして、shell(\\127.0.0.1\Test\Test.exe)などとしても、
test.exeは、自端末で実行されてしまいます。
WMIを使用してリモート実行も可能ですが、
全自動(一切入力の必要なし)でない限り、インストーラーを実行しても無意味です。
普通にコピーでいいと思いますよ。
>実行中の自exeを上書きすることはできないんじゃないでしょうか?
ネットワークで実行中のアプリを終了させたいなら、WMIを使用すると簡単ですよ。
strcomputer = InputBox("コンピュータ名を入力してください", "入力", "127.0.0.1")
Set objWMIService = GetObject("winmgmts://" & strcomputer & "/root/cimv2")
Set colShares = objWMIService.ExecQuery("Select * From Win32_Process Where Description=""notepad.exe""")
For Each Prc In colShares
Prc.Terminate
Next
レスありがとうございます。
実行中の自身を上書きすることに再度チャレンジしてみたいと思います。
もし行き詰ったらバージョンアップ用のプログラムを作成してみます。
ありがとうございました。
ツイート | ![]() |