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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0112
asw.derosもどきをアップデートできるようにしたい21解決


asw.der

リンク

2022/1/12(Wed) 22:06:29|NO.94986

OSもどきをHSPでつくっている者です。
突然質問なのですが、WindowsみたいにOSもどきもアップデートできるようにできませんか?
例えば、自分がアップデートファイルを配布すると、僕のOSもどきをつかっている、皆さんのもどきにアップデートファイルがダウンロードされて、
もどきのシステムを書き換えたりしてできませんか?
もしその手があるならサンプルコードほしいです。



この記事に返信する


ねんねこ5787

リンク

2022/1/13(Thu) 10:50:48|NO.94992

hspinetとZIPファイルを解凍できるDLLが必要
あとMediaFireとかの直リンクでダウンロードができるうpろだが必要
わからないことは何でも聞いて



asw.der

リンク

2022/1/13(Thu) 11:04:10|NO.94993

hspinetと、Zipが解凍できる、DLLですか。
コードがわからないので。。。教えてもらえれば幸いです。
DLLの解凍コードってどんなコードですか?
hspinetは、サンプルコードのやつですよね?



Crystal

リンク

2022/1/13(Thu) 14:06:44|NO.94994

総合アーカイバーというサイトにそのDLLとHSPのソースコードがあります。
http://www.madobe.net/archiver/
こちらを参考にしてみてください。



asw.der

リンク

2022/1/13(Thu) 14:20:31|NO.94995

やってみます。
ありがとうございます



Crystal

リンク

2022/1/13(Thu) 14:37:21|NO.94996

もし、この方法が使えないなどあるのなら、次のような方法だとうまくいく気がします(ただサーバー必須で調べてない)

.▲廛蟲動時に特定のURLにアクセスし、最新のバージョンを取得する(例:https://test.com/update/get/newver.txt みたいな)
そのテキストに最新のバージョンをドットなし、数字で書く。(ver.1.2なら 12 とするとか)

現在インストールされているバージョンを取得(テキストドキュメントでどっかに書いとく)
これも、,汎瑛与字のみ。
> △覆蕁∈膿携任鬟瀬Ε鵐蹇璽匹気擦(例:hspinet で https://test.com/update/files/latest.exe をDLさせる)

EXE形式にしておいて、それをexecで実行。(コマンドラインで画面を表示せずインストールさせることもできる。 Inno Setupなら可能)

こんな感じでどうでしょう? ZIP解凍のDLLを使わず、サーバーとhspinetごり押しパターンです。
WordPress使えるレンタルサーバーならできそうです。(fc2あたりとか)
あと、URLはご自分ので置き換えを。ここではおそらく存在しないであろうURLで例としています。



ねんねこ5787

リンク

2022/1/13(Thu) 15:04:56|NO.94998

>>94996
test.comは既に登録されています(らしいです)。安全性もあるかわからないので「example.com」を使いましょう
https://www.example.com/



Crystal

リンク

2022/1/13(Thu) 15:27:10|NO.95000

>94998
Whois で確認できていませんでした。example.comを例にすべきでした



asw.der

リンク

2022/1/13(Thu) 16:09:36|NO.95001

みなさんわざわざありがとうございますいまからためしてみます



asw.der

リンク

2022/1/13(Thu) 16:28:52|NO.95003

たとえば、新しいexeをダウンロードしても、古いバージョンが残りませんか?
古いバージョンのexeを消すにはどうすればいいですか?



Crystal

リンク

2022/1/13(Thu) 16:50:19|NO.95006

>NO.95003
アップデート実行後、そのファイルを削除すればいいと思います。
例えば、こんな感じで、

//アップデートファイルをupdateフォルダに格納されているものとする exist "update\\latest.exe" if strsize!-1 :delete "update\\latest.exe" stop
このようにすることで、削除されます。 existを使っているのは、そのファイルが存在しないとき、エラーになるのを防ぐため、
あらかじめそのファイルが存在しているか確認しています。
strsizeはファイルのサイズで存在しない場合、-1が代入されるので、-1以外であれば存在しているとして削除を実行します。



asw.der

リンク

2022/1/13(Thu) 17:15:07|NO.95007

ありがとうございます



asw.der

リンク

2022/1/13(Thu) 17:31:26|NO.95008

ききたいのですが、
新しいバージョンの取得方法は、netloadをつかうんですか??
あと、もしバージョンがかわっていなかったら、どのようなコードで、OSもどき本編にはいるのですか???
    #include "hspinet.as"

netinit
if stat : dialog "ネット接続できません。" : end

neturl "ダウンロード先URL"

netload "ver.txt"

このあと、もし新しいバージョンがあったら、どのようなコードでダウンロードするのですか?

わかりにくい説明ですみません



Crystal

リンク

2022/1/13(Thu) 19:05:26|NO.95009

>新しいバージョンの取得方法は、netloadをつかうんですか??
あの後、考えたのが、hspinetにjsonの内容を取得できるものがあったのでそれを使えばいいと思います。
まず、netloadで、特定のURL(例:https://example.com/update/get/latest.json)にアクセスし、latest.jsonをダウンロード、
その後、そのファイルを同じフォルダ内に保存、noteload、noteselでjsonファイルを読み込み、hspinetの jsonopen命令でtextタグ
を読み込み、その後、latest.json内のバージョン > 現在実行しているバージョン ならダウンロードさせるとかですね。

>あと、もしバージョンがかわっていなかったら、どのようなコードで、OSもどき本編にはいるのですか???
textタグで取得した文字列をjsonVer とし、内部バージョンをnowVerとします。

if jsonVer > nowVer { netload "最新版のファイルURL" } else{ goto <<本編のフラグへ>> }
あっている自信はないですが、ある程度ソースにしてみました。

#include "hspinet.as" //hspinet.as読み込み #const NULL 0 //0をNULLとする #const nowVer 10 //1.0なら小数部分をとって10とする *get_latest netinit if stat : dialog "アップデートの取得に失敗しました。\n Failed Connect to Network." : end neturl "https://example.com/update/get" netload "latest.json" /* https://hogespace.hatenablog.jp/entry/2012/03/18/121132 より一部抜粋 JSON 読み込み */ notesel JsonData noteload "latest.json" jsonopen JsonPtr,JsonData //文字列からjsonオブジェクト生成 jsongetobj Jsonver,"text",Jsonver /*ここから最新版があるか確認*/ if Jsonver > nowVer { neturl="https://example.com/download/latest" netload "latest.exe" //これが終わるまで全体の処理は一時停止になる exec "latest.exe" //その後、これを実行。 end //上書き拒否対策でこのアプリのプロセス停止 } else { goto *<<本体実行フラグ>> } stop
突貫工事でやったのと環境がそろっていないため、検証できていません。間違っていたら申し訳ないです。



す²

リンク

2022/1/13(Thu) 19:51:13|NO.95010

これOSもどきに限らず、普通のソフトにも使えそうですね



asw.der

リンク

2022/1/13(Thu) 20:12:10|NO.95011

Crystalさん
そのコードは僕はどこをかきかえたらよいでしょうか?
初心者ですみません。



asw.der

リンク

2022/1/13(Thu) 20:12:51|NO.95012

urlだけで良いのでしょうか?



Crystal

リンク

2022/1/13(Thu) 22:42:56|NO.95014

>そのコードは僕はどこをかきかえたらよいでしょうか?
一番はURLです。レンタルサーバーを借りて、必ずおんなじにしなくていいのですが、ある程度サンプルURLにしておいた方がいいかもしれません。
ドメインは異なるので例えば、fc2のレンタルサーバーで、 hsp.web.fc2.comというドメインを入手したとすると、updateフォルダを作って、そのフォルダの中に
getというフォルダを作成すると、URLは、https://hsp.web.fc2.com/update/get になります。getフォルダの中に、アップデート確認用のlatest.jsonを書いておきます。
latest.jsonの中身は次のようにしてください。

{"text":"<<バージョン>>"}
これで読み込めるはずです。<<バージョンは必ず整数にしてください。小数にすると上のソースがバグります。
書き換える点を含め再度貼ります。

| main.hsp |

#include "hspinet.as" //hspinet.as読み込み #include "hsp3utf.as" //UTF-8に対応させる #const NULL 0 //0をNULLとする #const nowVer 10 //1.0なら小数部分をとって10とする *get_latest netinit if stat : dialog "アップデートの取得に失敗しました。\n Failed Connect to Network." : end /*ダイアログの内容を自由に変えてOK!*/ neturl "https://example.com/update/get" /*URLを自分のものに合わせよう*/ netload "latest.json" /*ファイル名も変えるならここも*/ /* https://hogespace.hatenablog.jp/entry/2012/03/18/121132 より一部抜粋 JSON 読み込み */ notesel JsonData noteload "latest.json" jsonopen JsonPtr,JsonData //文字列からjsonオブジェクト生成 jsongetobj Jsonver,"text",Jsonver /*ここから最新版があるか確認*/ if Jsonver > nowVer { neturl="https://example.com/download/latest" /*URL違うなら変える*/ netload "latest.exe" //これが終わるまで全体の処理は一時停止になる /*ファイル名変える*/ exec "latest.exe" //その後、これを実行。 /*ファイル名変える*/ end //上書き拒否対策でこのアプリのプロセス停止 } else { goto *<<本体実行フラグ>> /*OSの処理が始まるフラグに置き換えよう*/ } stop
最低限置き換えるところは、 /*<<コメント>>*/にしましたのでご確認ください。
また、JSONの処理がバグっている可能性もあります。JSONを保存する際、ネットの場合、UTF8で保存するのが一般です。
ですので上のソースはそれを修正したものだと思ってください。 UTF8が使えるよう追加しました。
JSONの処理がおかしいと思ったら参考元を参考にしていただくかほかの方に聞かれるのが一番手っ取り早いです。
基本的に修正するところは ""(ダブルクォーテーション)で囲まれた文字なのでバグ以外は修正する必要はないと思います。



Crystal

リンク

2022/1/13(Thu) 22:47:03|NO.95015

すみません、ソースに誤りがありました。
ソース上から22行目、

neturl="https://example.com/download/latest" /*URL違うなら変える*/
となっていますが、パラメータなので"="は不要でした。
ですので次のものに置き換えてください。

// 22行目修正 neturl "https://example.com/download/latest" /*URL違うなら変える*/



asw.der

リンク

2022/1/13(Thu) 22:52:03|NO.95016

ありがとうございます試してみます



名無し

リンク

2022/1/13(Thu) 23:07:26|NO.95017

>>web.fc2.com
これ、fc2ホームページのものだと思うけど
fc2ホームページは規約でファイル置き場として利用することを禁止してるので
fc2を使うならfc2ドメインとfc2レンタルサーバーを利用しようね
例だし大丈夫とは思うけど一応ね



asw.der

リンク

2022/1/13(Thu) 23:21:29|NO.95018

ようやく、できました!
助けてくださった皆様ありがとうございました



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.94986への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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