HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1129
CHSPのアプリの更新データを作りたいのですが…15解決


C

リンク

2016/11/29(Tue) 22:44:04|NO.77411

自分で作ったHSPのゲームをアップデートしたいのですが、
何を調べて良いかすら皆目見当つかないので質問しました。

HSPで作ったゲームのプログラムの一部分だけを、
直接ソースを触らずに外部から違うファイルを読み込ませるだけで
変更する事はできないでしょうか?
できるだけ高機能で、容量の少ないやり方が良いのですが、
HSPも初心者でPCの技術や知識も殆ど無いので、やさしく教えてくれると助かります…。



この記事に返信する


沢渡

リンク

2016/12/1(Thu) 13:00:10|NO.77425

こちらで紹介されているソフトを使用してみてはいかがでしょうか。
リンク先では「海外ソフトの日本語化パッチを作成する方法」として紹介していますが、
バージョンアップ差分を作るのにも使える筈です。
http://d.hatena.ne.jp/wwwcfe/20091213/binary_patch



C

リンク

2016/12/1(Thu) 14:03:39|NO.77426

うーん…HSPで作る事はできませんか?

例えば、そのゲームに
追加プログラムのファイルを読み込むように
予めプログラムしておいて、
その後に追加プログラムを作成して読み込ませる、
という方法では不可能ですか?



MillkeySoftware

リンク

2016/12/2(Fri) 12:21:10|NO.77429

実行ファイルは、その実行ファイルが実行中にファイルデータを更新できないのは知っているよね?
(自身のプロセス保護)

そうなると、2種類の方法しかなくなるわけで自己更新型とスクリプト実行方式。

[自己更新型]
Happy.exe Ver 1.0。
インターネット上の新しいファイル Happy.exe Ver 1.2。
Happy.exe Ver 1.0 上にて、新しいファイルを Happy_Temp.exe としてダウンロード。
ダウンロードされた Happy_Temp.exe を実行する。
Happy_Temp.exe が実行されたら、Happy.exe に終了するよう指示する。
終了されたら Happy.exe は削除可能なので削除する。
削除完了したら、Happy_Temp.exe ファイルを Happy.exe として複製する。
次に Happy.exe を実行し、Happy_Temp.exe を自己抹消プロセスとして実行するように指示する。
出来上がった Happy.exe が更新されたプログラム

[スクリプト方式]
これは、HSPのスクリプトと同じで、自らが解釈できるように作成されたテキストなど。
仕組みは、HSPのスクリプトみたいなインタープリタなので、プログラム実行中でも動的に変更できる。
ただし、解釈させるように組み込むのが大変である。
"a = 0" という命令を主自身が 「a は 0 なんだな」と解釈しないといけない。
参考 URL : https://books.google.co.jp/books?id=Czpqqfv7WSgC&pg=PA165&lpg=PA165&dq=HSP+%E6%96%B0%E5%AE%BF+%E5%85%AC%E5%9C%92&source=bl&ots=yL9DtlXGb5&sig=jVhYUrG9xF2hO1AwFcCLqZ7F5Y0&hl=ja&sa=X&ved=0ahUKEwjd5oiqxdTQAhVIUbwKHWT7CmQQ6AEIIjAB#v=onepage&q=HSP%20%E6%96%B0%E5%AE%BF%20%E5%85%AC%E5%9C%92&f=false
ノベルゲームなどの作り方と同じで、主自身が命令を追加していけば高度な動作も可能。



C

リンク

2016/12/2(Fri) 16:24:33|NO.77430

有難うございます。
Millkeyさんの自己更新型というのを使いたいのですが、
終了、削除、名前を変えて複製、というのは
どのようにすれば良いでしょうか?
すみません、初心者で…。



沢渡

リンク

2016/12/2(Fri) 19:47:15|NO.77431

説明するとかなり長くなりそうなので、作ってみました。
わからない命令や処理があったら、付属のヘルプで調べてください。

#include "kernel32.as" //終了確認用 //終了確認 //"happy_temp.exe"から"happy.exe"を削除する、 //もしくは"happy.exe"から"happy_temp"を削除する場合、 //削除したい実行ファイルが終了していることを確認する必要がある。 //参考:http://lhsp.s206.xrea.com/hsp_system.html の"実行ファイルの二重起動防止" CreateMutex 0, 0, "happy" repeat GetLastError if stat!=183 : break //statが183の場合、 wait 100 loop if dir_cmdline="vup_start" { bcopy "happy_temp.exe","happy.exe" exec "happy.exe vup_end" end } if dir_cmdline="vup_end" { delete "happy_temp.exe" } netinit neturl "http://www.hoge.com/" //happy.exeをアップロードしている場所に置き換えてください //最新のバージョンを取得 netdlname "ver.txt" netload "ver.txt" //ダウンロード notesel a noteload "ver.txt" noteget ver0,0 noteunsel : a="" if int(ver0)>ver { //ダウンロードの必要があるので、最新のhappy.exeをhappy_temp.exeとしてダウンロード dialog "最新バージョンが公開されています。アップデートしますか?",2 if stat=6 { netdlname "happy_temp.exe" netload "happy.exe" exec "happy_temp.exe vup_start" end } } //以下、処理を続ける

・バージョンアップごとに、冒頭の定数verの数値を変更することをお忘れなく。
・実行するには、hspをインストールしたフォルダにあるhspinet.dllを、
 実行ファイルのあるフォルダにコピーする必要があります。

このような処理を冒頭に置いた上でhappy.exeを作成し、インターネット上の
ダウンロード可能な場所にアップロードするのですが、その際、
最新のバージョンナンバーを記したテキストファイル・"ver.txt"を作成し、
実行ファイルと同じ場所にアップロードしておきます。
たとえば、最新バージョンが1.01の場合、ver.txtは

101
と書いておきます。

……と、こういった方法でやってみましたが、この方法だとウイルス対策ソフトが
「不審なファイルをダウンロードした」という警告を出してくる場合があります。
(うちのウイルスバスターは出してきました)
exeをそのままダウンロードするのではなく、zipファイルをダウンロードして解凍する
といった工夫が必要になるかもしれませんが、ちょっとややこしい処理が必要になるようなので、
以下のURLを参考にしてみるといいかもしれません。
http://lhsp.s206.xrea.com/hsp_file.html



沢渡

リンク

2016/12/2(Fri) 20:50:47|NO.77433

すみません、プログラムの冒頭にこれが抜けていました。追加してください。

#const ver 100 //バージョンアップのたびにこの数値を変える。 //たとえばVer.1.00の場合は100 #include "hspinet.as" //ネット関連



C

リンク

2016/12/2(Fri) 23:56:45|NO.77435

色々調べてみましたがよく仕組みが分かりません…。
Happy.exeとHappy_Temp.exeの関係をもう少し詳しく教えて下さい(;´_`)



KA

リンク

2016/12/3(Sat) 07:00:09|NO.77437

追加ファイルだけダウンロードして、上書きするだけで
良いんじゃないのかな?

複雑なことは後にして、何が目的なのかを優先して考え
ましょう。



MillkeySoftware

リンク

2016/12/3(Sat) 18:18:38|NO.77442

>>Happy.exeとHappy_Temp.exeの関係をもう少し詳しく教えて下さい(;´_`)

関係性というか、現在実行中のファイル自体を削除・変更などできない。
更新元の Happy.exe は実行してるよね?(このプログラムがないと新しいファイルがあるか確認できないので)

んで新しいファイルがあったとして、新しいファイルを happy.exe として保存はできないのはわかるよね?
(プロセス保護の為、実行イメージは保護される)

その場合、現在実行中(自身)を終了させないと更新ができない事になる。
「どうしたらいい?」という事になるんだけど、新しいファイルを Happy_Temp.exe として実行して、Happy.exe は終了すると
Happy.exe は保護状態から解放されて、ファイルを更新できるようになるよね?

更新できるようになったら、Happy_Temp.exe で新しい Happy.exe を Happy.exe 名として保存すれば更新完了。
新しい Happy.exe を起動したときに、一時的に作った Happy_Temp.exe があったら、それを削除しちゃえば完璧!



C

リンク

2016/12/3(Sat) 23:42:17|NO.77444

こういう解釈で合ってるでしょうか?


Happy.exe(ver.1.0)がHappy_Temp.exeを探す ↓ Happy_Temp.exeが見つかった場合、Happy_Temp.exeを起動する ↓ Happy_Temp.exeがHappy.exe(ver.1.0)を終了する ↓ Happy_Temp.exeを『bcopy』で、Happy.exe(ver.1.1)として保存 ↓ Happy.exe(ver.1.1)を起動 ↓ Happy.exe(ver.1.1)がHappy_Temp.exeとHappy.exe(ver.1.0)を『delete』で消す

あとはbsaveで最初のコピーの処理をしないようにログファイルを作れば大丈夫でしょうか…?



沢渡

リンク

2016/12/4(Sun) 18:51:20|NO.77452

 なんだか、わざわざ長文書いておいてなんですが、やはりexeファイル自身を自動で
アップデートさせるというのは、セキュリティ的にも問題あるような気がしてきました。
 「exeファイルを自動でダウンロードして勝手に実行させる」というのは、ウイルスなどの
マルウェアがよくやる手法ですし、ウイルス対策ソフト等が
「このソフトは危険な挙動をしている」と警告を発してくるような処理は、
ユーザーに余計な不安を与えてしまうので、やらない方が無難だと思います。

 事実、「自動的に最新版にアップデートする」という機能を持ったソフトは、少なくとも
個人製作のフリーソフトではほとんど(全く?)見られません。
 せいぜい「アップデートしたことをユーザーに知らせて、最新版をダウンロードできる
ホームページに案内する」という程度です。

 長々とサンプルコードまで組んでおきながら、話の腰を折るようで申し訳ございません。
 以下、私がさっきまで書いていたCさんへのお返事になります。どうしても、というのなら
ご参考ください。

〜〜〜〜〜〜〜〜〜〜〜〜〜

 だいたい合っているのですが、いくつか。

>Happy_Temp.exeがHappy.exe(ver.1.0)を終了する
 これはむしろ、Happy.exeからHappy_Temp.exeを起動させた直後、Happy.exeを
自分からendで終了させた方が処理的にも楽です。
(私が上で書いたコードはそうなっています)

>Happy.exe(ver.1.1)がHappy_Temp.exeとHappy.exe(ver.1.0)を『delete』で消す
 それより前の「Happy_Temp.exeを『bcopy』で、Happy.exe(ver.1.1)として保存」の
段階で、Happy.exe(ver.1.0)はHappy.exe(ver.1.1)で上書きされているので、
Happy.exe(ver.1.0)をここで消す必要はありません。

>Happy.exe(ver.1.0)がHappy_Temp.exeを探す
>Happy_Temp.exeが見つかった場合、Happy_Temp.exeを起動する
 この場合、Happy_Temp.exeをユーザーにどうやって入手させるのかが問題になります。
 「Happy_Temp.exeをユーザーにホームページから手動でダウンロードさせ、
Happy.exeと同じフォルダにコピーさせる」という方法では、一体何のためにこんな
手間暇かけた方法を使っているのかわからなくなりますよね?
(ユーザーにこんな手間をかけさせずに、自動でアップデートするというのが目的なのですから)
 だからこそ、「ソフトの新しいバージョンが公開されているかどうかを自動的に検知して、
ダウンロードの必要がある時だけ自動でダウンロードしてアップデートする」という手順が
必要になるのです。

〜〜〜〜〜〜〜〜〜〜〜〜〜



C

リンク

2016/12/4(Sun) 19:23:26|NO.77453

>これはむしろ、Happy.exeからHappy_Temp.exeを起動させた直後、Happy.exeを
>自分からendで終了させた方が処理的にも楽です。
>Happy.exe(ver.1.0)はHappy.exe(ver.1.1)で上書きされているので、
>Happy.exe(ver.1.0)をここで消す必要はありません。

なるほど!

>Happy_Temp.exeをユーザーにどうやって入手させるのかが問題になります。

親しい友人とだけ共有するソフトになるので、
メール等での手渡しでダウンロードしてもらう形になりそうです。
Happy_Temp.exeをダウンロードしてもらって、その後でHappy.exeを起動、アップデート、
という流れにしようかと思っています。
(Happy_Temp.exeを起動すれば良いのですが、こういう演出が好きなので…)



MillkeySoftware

リンク

2016/12/4(Sun) 21:54:49|NO.77454

>>Happy_Temp.exeをダウンロードしてもらって、その後でHappy.exeを起動、アップデート、
という流れにしようかと思っています。

ん? いままでの話は、なんだったの?
メール添付できるのであれば、単純に差分ファイルだけでもいいよね?

んまぁ、がんばれ・・・



C

リンク

2016/12/5(Mon) 13:14:50|NO.77460

差分ファイルだとアップデートを消せてしまうので上書きが良いかなと…。
bcopyすら知らなかったもので…(-_-;)



C

リンク

2017/4/27(Thu) 05:38:23|NO.79316

解決しました、沢山の回答有難うございました!



ONION software Copyright 1997-2021(c) All rights reserved.