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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0903
しまくろねこ「実行ファイル自動作成(Ctrl+F9)」でアイコンが書き変わらない14解決


しまくろねこ

リンク

2022/9/3(Sat) 13:12:29|NO.97053

HSP3.6 / 3.7β1 / 3.7β2 と「実行ファイル自動作成(Ctrl+F9)」でexeファイルを作る際に「#packopt icon」でアイコンファイルを指定しているのですが、なぜか指定のアイコンになってくれません。
HSP3.6 / 3.7β1 までは、「hspicc.exe」(*)で書き換えできていましたが、 3.7β2 では書き換えできなくなりました。
そこで、「ResourceHacker」を使用してみたのですが、やはりだめでした。アイコンを書き換えた(実際には書き換わってない)exeファイルは実行不能のものができあがりました。
おにたまさんに直接ソース一式をメールで送っておにたまさんの環境で、実行ファイル自動作成でアイコンが書き換わるか遣っていただいたのですが、正常に書き換わったのことでした。どうも私のPCの環境だけ駄目みたいです。

色々なアイコン書き換えソフトを試しましたが、書き換わった場合もあったのですが、実行不能のexeファイルになってしまいました。
OSをクリーンインストールしたり、ソースを入れているドライブをフォーマットしたり、ソースのあるフォルダをドライブの一番上に持ってきてみたり、「IconCache.db」を削除したり、レジストリに「MaxCachedIcons」キーを追加して値を「2048」と追加してみたり、様々なことを試しましたが結果は駄目でした、

私のように「実行ファイル自動作成(Ctrl+F9)」でアイコンが書き換えできない人はいないでしょうか?

(*)
http://lhsp.s206.xrea.com/works/



この記事に返信する


ppp

リンク

2022/9/3(Sat) 19:27:41|NO.97055

OS側がキャッシュしているだけでは?
デスクトップあたりに新たにフォルダを作りそこに(実行ファイルだけでok)コピーしても変わらないんですか?



しまくろねこ

リンク

2022/9/3(Sat) 19:43:21|NO.97056

> pppさん
書き込みありがとうございます。

私もそう思って色んな場所に、作られたexeファイルをコピーしてみたのですが駄目でした。
私のPCだけみたいなので正直諦めようかと思います。
アイコンが変わらなくてもexeファイルは動いてくれますし。



しまくろねこ

リンク

2022/9/4(Sun) 14:43:02|NO.97066

私のPCはWin11で、ほかのHSPが入ってないPC(Win10)でHSP3.7β2での実行ファイル自動作成でアイコンが書き換わるか試しましたが、やはりだめでした。
新しいHSP3.7が出るまで諦めます。
解決していませんが、解決済みとさせていただきます。



Drip

リンク

2022/9/4(Sun) 23:16:12|NO.97067

しまくろねこさん

こんにちは。Dripです。
実は私もしまくろねこさんと同様の症状をHSP3.6メイン運用時頃から確認しており、この症状の発現する最小のプロジェクトの作成に向けて、パックするファイルの数、ソースコードの長さ、使用するライブラリ(標準機能やDish、hgimg4)などを調整したりと色々試みているのですが中々うまく行かず、現時点まで問題を報告せずにおりました。
今日はこのようなスレッドを機会に不完全ながら報告させていただきます。


この問題の発生するプロジェクトではアイコンの書き換え不良の他に、稀に全く実行できない実行ファイル(startup failedが表示されるだけ)が作成される等、不具合の検体としては最高の素材であり、完全な再現性のあるプロジェクトとして大切に保管してあります。
もちろんOSのアイコンキャッシュ等が原因ではなく、生成された実行ファイルは正しく破損しているようです。(あくまでアイコンが書き変わっていない・稀にHSPのコード自体が走らないという意味での破損です。)
今程HSP3.7b2で実行ファイルの作成をテストしたところ、ERROR No.10 実行ファイルが見つかりません と表示され、アイコンも書き変わりません。(書き換えに失敗する際、このメッセージが必ず表示されるわけではありません。どちらかと言うと表示されない事の方がずっと多いです。エラーした時も実行ファイル自体は生成されています。)

このプロジェクト自体は大規模かつとても大切なものであり、どうしてもコンパイルする必要がありました。
そこで私は実行ファイルの自動作成を使わず、段階的に手作業でコンパイルを行うことでこの問題を回避できないかと考えました。(マニュアルに沿ってhspcmp.asを使用した自作のスクリプトからコンパイルします。)
この方法は思いのほか上手く行き、アイコンの書き換え不良は起こらず、そればかりかアイコンキャッシュの異常まで発生することなく、コンパイル作業はその100%が成功しています。

HSPの実行ファイル自動作成ではiconinsが実行されるタイミングか、その作法がおかしいのでしょうか。
アイコンがマグカップの状態でOSにキャッシュされたまま恒久的に異常表示が続くのは、最近ですとHSPの実行ファイル自動作成時くらいでしか経験することがありません。(キャッシュによるアイコン異常表示の件についてはどのようなスクリプトのコンパイルであっても完全な再現性があり、これはHSP固有の(やり方の)問題と捕らえています。これはどうにかしていただきたいのですが…)


何かわかったら報告させていただこうと、しまくろねこさんが別スレッドで最初にこの問題を報告されていた頃から私も時たま実験を繰り返しておりましたが、未だに最小のプロジェクトの作成は成功しておりません。(症状の発現例に規則性がなく、共通することと言えばHgimg4を使用したものばかりですが、これも偶然の可能性は充分に考えられます。もうひとつ共通することとして、これは報告すべきか微妙なのですが、いずれも「本気で開発したプロジェクト」という点が共通しています。適当なスクリプトではなぜかこの問題が起こりません。よってこれらの検体は他人にお渡しすることができないという点が共通しています。)

私の方でも調査を続け、問題が特定できたら報告させていただこうと思いますが、私も単なるHSPのユーザーの一人に過ぎないため、相当な遠回りを経て問題にアプローチすることになるかと思いますので、根本的な問題解決の役には立たない可能性が高いです。
HSPの開発サイドでこのような問題を引き起こす原因に心当たりがある場合は是非対策を検討していただきたく、その折にはこの問題の再現性を確認できる者へ検証を打診していただければ大変に嬉しいのですが…


本日の報告は検証が不十分で的外れな事を言っている可能性があり、しまくろねこさんの症状と全く同じものという確証もないため、恥を承知での報告となります。
この報告が何かのお役に立てば幸いです。以上となりますが、失礼させていただきます。



しまくろねこ

リンク

2022/9/5(Mon) 07:42:57|NO.97068

> Dripさん

書き込みありがとうございます。
同じような方がいるとは思いませんでした。
不謹慎ながらちょっと嬉しいです。
実行ファイル自動作成からアイコンが変わらないのはHSP3.6からHSP3.7β1で起きていましたが、外部ツールで書き換えられていたので掲示板等に報告しておりませんでした。


> いずれも「本気で開発したプロジェクト」という点が共通しています。

そうなんです。適当にテストで作成した小さなプロジェクトではアイコンが書き換わるのですが、ちゃんとしたゲーム(使用するファイルやソースが大きい)ではアイコンが書き換わらないんです。
とりあえず新しいHSP3.7がダウンロードできるようになったらまたテストしようと思います。



しまくろねこ

リンク

2022/9/5(Mon) 21:39:22|NO.97070

気になる記事を見つけました。
その記事通りにやったところ、HSP3.7β2の実行ファイル自動作成でアイコンが書き換わりました。

#packopt type 0 #packopt name "piyoko_defense" #packopt icon "icon.ico" #packopt xsize 720 #packopt ysize 1280
は外部ファイルにして#includeしていたのですが、メインソースに記述したところアイコンが書き換わりました。
そう考えると逆におにたまさんの環境でアイコンが書き換わったのはなぜだろうと・・・?
実際には#includeで外部ファイルにしてもアイコン書き換えに対応しているのかな?

すでに解決済みにしてありますが、今度こそ解決済みです。
しかし、HSPプログラムコンテストにはHSP3.7β1を使います。(3.7β2はAndroid上でbsaveが働かないので)



アイコン書き換えに対応したhsed3.exeを作成してみました
http://hsp.tv/play/pforum.php?mode=pastwch&num=45968

> スクリプトエディタレベルでの対応なので、
> #packopt icon "ファイル名" の記述はメインスクリプトにする必要があります。
> #include などで外部に記述することはできません。



しまくろねこ

リンク

2022/9/5(Mon) 22:20:30|NO.97071

「sample\new35\packopt.hsp」の#packopt を#includeして実行ファイル自動作成でアイコンが変わるかやってみた。
・・・アイコン書き換わってる・・・。
ってことは、おにたまさんが言っていたことは本当だった・・・。
解決済みにしたけど、お手上げみたいです・・・。

sample\new35\packopt.hsp

#include "header.hsp" ; 実行ファイル・アイコン書き換えサンプル ; ([ctrl]+[F9]で実行ファイルの自動作成を行なってください) ; (packopt.exeが生成されます) ; randomize screen 0,640,480 cls 4 *main hsvcolor rnd(192),255,255 ; ランダムな色を指定 pos rnd(ginfo_sx),rnd(ginfo_sy) ; ランダムな座標を指定 mes "☆" ; 「☆」を表示 wait 10 goto *main


sample\new35\header.hsp

// 作成する実行ファイル名 #packopt name "packopt" // 埋め込むアイコンファイル #packopt icon "tamaicon.ico" // 言語を指定 デフォルトは日本語 (1041) 英語(米国)は 1033 など10進数で記述 #packopt lang "1041" // 埋め込むバージョン情報を記述したファイル #packopt version "version.txt"



Drip

リンク

2022/9/5(Mon) 23:17:47|NO.97072

しまくろねこさん

こんにちは。ご返信ありがとうございます。
私の保有している実行ファイル作成時アイコンが書き変わらない全てのプロジェクトの検体におきましては、#include先でアイコンを含むその他の#packoptを指定したりしているものはありません。
メインソースコード冒頭にて、ご提示されたような雛形の形で#packoptを一括指定しているもので今回のような異常動作は確実に再現されます。
まだ調査の余地はあると感じておりますので、時間のある時にまた調べてみようと思います。
確度の高い手がかりがもう少し集まってくると条件を絞り込めそうなのですが…今のところ私も手探りの域を脱しません。
ハードウェアを含めて環境の違いも考慮する必要があると考えております。



usagi

リンク

2022/9/6(Tue) 03:00:55|NO.97075

こんにちわ。
私の環境だとしまくろねこさんの"packopt.hspの#packoptを#includeして。。。"
でアイコンが変更出来ない症状が再現できてますね。

私は純正の”hsed3.exe”エディタしか使ってないのですが、
違いとしては一瞬起動する"iconins.exe"が見えなかったです。
また、"hsp37\hspsdk\iconins"のソースをぱっと見てみてもexe自体が問題あるようには感じませんでした。

試しに"iconins.exe"を"_iconins.exe"とリネームしてから自動作成してみたら、
メインスクリプトにある場合は”実行ファイルが見つからないエラー”がでますが、
外部スクリプトに置いた場合はエラーが出ず、そもそも起動していないようでした。

ついでに、"hsed3le.exe"なら外部にあってもアイコンは書き換わったので、
エディターの不具合の様な気もしております。
※別のエディタからコンパイルしている方だと症状は違うのかも
※あくまで私の環境ではですが、3.6も同様でした。

そうでない症状でしたら、3.6にしたあたりでWindowsDefenderからフォルダ除外していないと
うまくexeが作れないことはあったかもしれません(これはうろ覚え、今は問題無い)



しまくろねこ

リンク

2022/9/6(Tue) 07:07:37|NO.97077

> Dripさん
> #include先でアイコンを含むその他の#packoptを指定したりしているものはありません。
> メインソースコード冒頭にて、ご提示されたような雛形の形で#packoptを一括指定しているもので今回のような異常動作は確実に再現されます。
> ハードウェアを含めて環境の違いも考慮する必要があると考えております。

そうなってくると原因の特定が難しくなりますね。


> usagiさん
> 私の環境だとしまくろねこさんの"packopt.hspの#packoptを#includeして。。。"
> でアイコンが変更出来ない症状が再現できてますね。

再現できましたか。
しかし私の環境では普通にアイコン書き換えられてます。
エディタはソースを書くときは「LeAntilla」ですが、実行ファイルを作る時だけ標準のエディタを使っています。



しまくろねこ

リンク

2022/9/6(Tue) 22:39:54|NO.97080

実行ファイル自動作成でexeファイルが作成された後、アイコンを書き換えるまでに1秒ウェイト時間をかけようと、既存の「iconins.exe」を「iconins2.exe」にリネームして、下記のソースを「iconins.exe」で作成しHSPインストールフォルダにコピーし、実行ファイル自動作成から「iconins.exe」を起動させようと思ったのですが、どうも起動していないようなのですが、アイコンの書き換えは「iconins.exe」で行われていないのでしょうか?

#packopt name "iconins", 0 wait 1000 exec "iconins2.exe " + dir_cmdline dialog "OK" end



MillkeyStars

リンク

2022/9/7(Wed) 07:54:15|NO.97081

iconins.exe が起動される条件は、バージョン情報・アイコン・言語ID・UPX・マニフェストのいずれかが #packopt で指定された場合のみ起動します。
#packopt name だけでは、実行ファイル名を変更するだけで完結するので iconins.exe は起動しません。

iconins.exe は、実行ファイル作成後のリソースファイルに関係するものを後処理する為に起動します。



しまくろねこ

リンク

2022/9/7(Wed) 16:06:09|NO.97086

> MillkeyStarsさん

情報ありがとうございます。
これで確認したいことができました。


「#packopt icon "icon.ico"」をメインソースではなく、別ファイル(仮に"A.hsp")に置き、メインソースから#includeで "A.hsp" を読み込む形で、実行ファイル自動作成(ctrl+F9)でexeファイルが作成すると、「iconins.exe」が起動していないことを確認しました。
(※ただし、小さい規模のソースでは起動します。ある程度大きな250kb以上のソースだと起動しません)

確認方法は、下記ソースから「iconins.exe」と名前で実行ファイルを作成し、HSPインストールフォルダの既存の「iconins.exe」を「iconins2.exe」にリネームして、作成した「iconins.exe」をHSPインストールフォルダにコピーし、上記のメインソースとは別に「#packopt icon "icon.ico"」を別ファイルにしたものを#includeで読み込む形のメインソースを実行ファイル自動作成(ctrl+F9)すると、本来#include で読み込んだ「#packopt icon "icon.ico"」が「iconins.exe」起動するためのトリガーになるはずですが、起動しません。正常に起動するとこの例では「OK」とダイアログが表示されるはずです。

#packopt name "iconins", 0 dialog "OK" wait 100 exec "iconins2.exe " + dir_cmdline end



MillkeyStars

リンク

2022/9/7(Wed) 16:44:36|NO.97088

NO.97086 の現象確認できました。
確かに、#include 内に書かれている #packopt プリプロセッサ命令を認識していませんね。



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