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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0824
科学太郎Windows10で一部のプログラムが起動不可能に!!12解決


科学太郎

リンク

2018/8/24(Fri) 21:29:59|NO.85176

2010年頃にC言語で作成した「ミニ時計ランチャー」があります。
現在、この自作ソフトを HSP に移植中です。

数年前から一部のプログラムのアイコンが
読み込めずに不具合が出ていたために
簡単なサンプルを作成してみました。

#include "Shell32.as" //-------------------------------------- // 記号定数(API定数) //-------------------------------------- #const global NULL 0 #const global SW_SHOWNORMAL $00000001 //-------------------------------------- // テスト用 //-------------------------------------- *Main ;.好リーン・キーボード OpenShellExecute "C:\\Windows\\System32\\osk.exe" if(stat==0):dialog ".好リーン・キーボードは起動できません。" ;▲轡好謄爐良元 OpenShellExecute "C:\\Windows\\System32\\rstrui.exe" if(stat==0):dialog "▲轡好謄爐良元は起動できません。" ;Windowsファイアウォール OpenShellExecute "Firewall.cpl" if(stat==0):dialog "Windowsファイアウォールは起動できません。" stop //-------------------------------------- // 実行ファイルの起動 //-------------------------------------- #deffunc OpenShellExecute str _fname_ if(_fname_)=="":return ShellExecute hWnd,NULL,(_fname_),NULL,NULL,SW_SHOWNORMAL return(stat>=32)
上記のサンプルを実行すると3つ共に実行できないことが判明。
なお、Windows Vista では3つ共に起動できました。

しかし、気づいたとき(Windows 8.1)あたりから
アイコンが正しく読み込めなくなってました。

いろいろと調べてみて「ファイル名を指定して実行」から入力すると3つ共に起動できます。
Windowsフォルダを調べても実行ファイルは3つ共に存在します。
つまり、プログラムからの実行が出来ないのです。
マウスでの実行は可能です。

なぜ?
皆さんの環境ではどうですか?
Windows XP
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
などの報告を欲しいです。



この記事に返信する


Velgail

リンク

2018/8/24(Fri) 22:20:03|NO.85177

疑わしい症例として、こちらを上げてみます。
http://dorara.net/997.html

あとは単なる報告です。
こちらも起動できませんでした。「Windows 10 / 64bit版」です。
後続の報告者は「OS bit数」も必ず記述してください。

特にWin10/32bit版ユーザーがいる場合、比較ができればより良いと思います。



あらや

リンク

2018/8/24(Fri) 22:23:58|NO.85178

64ビットPCで32ビットプログラムを起動したときの不具合だと思います。

通常のマウスでアイコンクリックなどの起動方法や
「ファイル名を指定して実行」で起動する場合は
【C:\Windows\System32】内のファイルを起動するという形になりますが

64ビットPC環境の32ビットプログラムから起動とすると
【C:\Windows\SysWOW64】内のファイルを起動しようとします。

ソースにフルパスを指定していても【SysWOW64】が優先されるようで、
タスクマネージャーなどはどちらにもあるので起動可能ですが、
上記3つは【System32】にしか存在しないため
ERROR_FILE_NOT_FOUND(指定されたファイルが見つかりませんでした。)のエラーになります。


解決法としてはソースの冒頭に

#include "hsp3_64.as"
を追加して64ビットプログラムとして実行すると
3つとも起動できると思います。


Windows10 64bitの環境で試したところ、上記の一行を冒頭に追加で起動できました。



Velgail

リンク

2018/8/24(Fri) 22:36:45|NO.85179

追記:
http://hsp.tv/play/pforum.php?mode=pastwch&num=69292
にて実装されていたものは起動できました。



Velgail

リンク

2018/8/24(Fri) 22:43:41|NO.85180

あらやさん(#85178)
半分合っていて半分間違い(半分というより2割間違い?)。

64bit起動の場合、
system32→system32, sysWOW64→sysWOW64とそのまま読んでくれますが、
32bit起動の場合は、
system32→sysWOW64, sysWOW64→sysWOW64となりフォルダが読めません。

更にここで、mklinkを使って無理やり読めるようにしてみました
[ mklink /d C:\system64 c:\Windows\System32 ]
が、c:\system64\osk.exeで起動できませんでした。

実はこのファイル、32bit版からまともに呼べないクソ仕様だったようです。

上の追記の構造を読んで、64bit版「だけ」マトモに動くようなexecにしたのがこちら。

#include "Shell32.as" //-------------------------------------- // 記号定数(API定数) //-------------------------------------- #const global NULL 0 #const global SW_SHOWNORMAL $00000001 //-------------------------------------- // テスト用 //-------------------------------------- *Main ;.好リーン・キーボード exec dir_win+"\\Sysnative\\cmd.exe /C start osk.exe",2 if(stat!=0):dialog ".好リーン・キーボードは起動できません。" ;▲轡好謄爐良元 exec dir_win+"\\Sysnative\\cmd.exe /C start rstrui.exe",2 if(stat!=0):dialog "▲轡好謄爐良元は起動できません。" ;Windowsファイアウォール exec dir_win+"\\Sysnative\\cmd.exe /C start Firewall.cpl",2 if(stat!=0):dialog "Windowsファイアウォールは起動できません。" stop



科学太郎

リンク

2018/8/24(Fri) 23:13:04|NO.85181

Velgailさん
あらやさん
情報ありがとうございます。

> 64ビットPCで32ビットプログラムを起動したときの不具合だと思います。
なるほど。

#include "Shell32.as" //-------------------------------------- // 記号定数(API定数) //-------------------------------------- #const global NULL 0 #const global SW_HIDE $00000000 #const global SW_SHOWNORMAL $00000001 //-------------------------------------- // テスト用 //-------------------------------------- *Main ;.好リーン・キーボード OpenShellExecute2 "C:\\Windows\\System32\\osk.exe" if(stat==0):dialog ".好リーン・キーボードは起動できません。" ;▲轡好謄爐良元 OpenShellExecute2 "C:\\Windows\\System32\\rstrui.exe" if(stat==0):dialog "▲轡好謄爐良元は起動できません。" ;Windowsファイアウォール OpenShellExecute2 "Firewall.cpl" if(stat==0):dialog "Windowsファイアウォールは起動できません。" stop //-------------------------------------- // 実行ファイルの起動 //-------------------------------------- #deffunc OpenShellExecute2 str _fname_ if(_fname_)=="":return s1="C:\\Windows\\Sysnative\\cmd.exe" s2=strf("/C start %s",(_fname_)) ShellExecute hWnd,NULL,s1,s2,NULL,SW_HIDE return(stat>=32)
上記の方法で、確かに32ビット版でも起動できました。
しかし、このままではアイコンが読み込めずに
メニューなどに表示出来そうにないですね。
とりあえず64ビット版なら良さそうですが…。

でも「C:\Windows\Sysnative」というフォルダが見当たりません。
不思議だ???
なぜだろう。



あらや

リンク

2018/8/24(Fri) 23:54:25|NO.85184

>あらやさん(#85178)
>半分合っていて半分間違い(半分というより2割間違い?)。
失礼しました。
詳細説明ありがとうございます。


>でも「C:\Windows\Sysnative」というフォルダが見当たりません。
「Sysnative」は仮想ディレクトリなので実体はありません。
一種のコマンドに近い物と考えた方が良いかもしれません。


Velgailさんの挙げた過去ログの方法で64ビット環境か32ビット環境かを判別して
それに合わせた方法で起動する、という形にするのが理想的でしょうね。



inovia

リンク

2018/8/25(Sat) 00:12:24|NO.85185

あれ?
記憶違いかもしれないけど、Sysnative って 32bit OS上では使えなかった気が。
64bit OS で 32bit アプリケーションを動かしたときのみだったような。



inovia

リンク

2018/8/25(Sat) 00:22:52|NO.85186

32bitのマシンを立ち上げて確認しました。
No.85180, No.85181 のスクリプトは共に 32bitOS 環境では動作せず。
https://hsp.moe/images/20180825.png

当たり前ですが、逆に NO.85176 のスクリプトは正常に動作しますね。



科学太郎

リンク

2018/8/25(Sat) 00:28:08|NO.85187

あらやさん

>「Sysnative」は仮想ディレクトリなので実体はありません。
なるほど。
仮想フォルダの「コンピュータ」と同じなのか。

> それに合わせた方法で起動する、という形にするのが理想的でしょうね。
今回は、公開予定がない自作ソフトですから64ビット版限定で exe を作った方が楽ですね。
と思いましたが…。

・[HSP]マルチコアCPU使用率のサンプル(3)
https://blog.goo.ne.jp/masaki_goo_2006/e/7b71e5c0bc8f63408e596dfcdb001175

このページのサンプルに

#include "hsp3_64.as"
を追加して実行すると「クエリーをオープンできません。」とダイアログが出ました。
困りましたね。

.好リーン・キーボード
▲轡好謄爐良元
Windowsファイアウォール
の3つが起動できてもパフォーマンス・カウンタでエラーになると移植できない。



inoviaさん
こちらの環境は Windows 10(64Bit)版ですが、
HSP3.3.2で32ビット版で実行ファイルを作成したわけです。
なので「Sysnative」という仮想フォルダは存在してるのでしょう。
正しく実行できましたので。



inovia

リンク

2018/8/25(Sat) 00:32:00|NO.85188

>こちらの環境は Windows 10(64Bit)版ですが、

私が言ってるのは、 Windows 10(32bit)版 で 32bitアプリを動かしたときのお話です。
NO.85181 のコードそのままだとWindowsの32bit版動かないが、大丈夫です?
っていう確認の意味で投稿しています。



科学太郎

リンク

2018/8/25(Sat) 00:39:23|NO.85189

> 私が言ってるのは、 Windows 10(32bit)版 で 32bitアプリを動かしたときのお話です。
> NO.85181 のコードそのままだとWindowsの32bit版動かないが、大丈夫です?
はい。理解できてます。



inovia

リンク

2018/8/25(Sat) 00:42:08|NO.85190

了解です。
公開予定がない自作ソフトということなので、今回はこの対応で問題ないということですね。



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