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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0823
qwertyバッチファイル実行について6解決


qwerty

リンク

2022/8/23(Tue) 21:09:18|NO.97011

質問です。

notesel bat noteadd "sfc /scannow",0,0 noteadd "pause",1,0 chdir "C:\\" notesave "hspbat.bat" notesel admin noteadd "powershell start-process hspbat.bat -verb runas",0,0 notesave "hspadmin.bat" exec "hspadmin.bat",16,"open"
上のスクリプトで作られた二つのバッチファイルでsfc /scannowを実行するという処理を
したいのですが、hspbat.batの時に「Windows リソース保護は、修復サービスを開始できませんでした。」
というエラーメッセージが表示されます。
これはhspのexec命令でhspadmin.batを実行したときだけ表示されて、hspadmin.batをダブルクリックで
起動したときはエラーメッセージは表示されず正常に実行されます。
hspのexec命令で上記のような処理を正常に実行するにはどうすればよいのでしょうか。

環境はWindows 11 Home 64bit HSP3.7b2です。



この記事に返信する


qwerty

リンク

2022/8/23(Tue) 22:28:20|NO.97014

追記

一応私自身バッチファイルの処理は、

最初に「hspadmin.bat」を実行する ↓ この処理で「hspbat.bat」を管理者権限で実行する。 ↓ 「hspbat.bat」の内容(sfc /scannow)が実行される
というものだと思っています。
バッチファイルに手を出したばかりなので間違っている可能性は十分あると思います。

それと最初に提示したソースコードが仮に作成したもので、質問したかったところとは
別のところでエラーを吐いてしまっていたので作り変えました。

notesel bat //noteadd "diskpart",0,0//これを実行すると正しく実行される(はず) noteadd "sfc /scannow",0,0 noteadd "pause",1,0 chdir dir_desktop notesave "hspbat.bat" notesel admin noteadd "powershell start-process hspbat.bat -verb runas",0,0 notesave "hspadmin.bat" exec "hspadmin.bat",16,"open"
バッチファイルがデスクトップに作られるようにしました。



usagi

リンク

2022/8/24(Wed) 04:53:23|NO.97016

アーキテクチャの問題ですね。
32bitアプリケーションから呼び出しているからかと思います。

64bitのWindowsを使っているので、直接クリックすると64bitでバッチ起動しますが、
HSPのデフォは32bitアプリケーションなので、そこから呼び出すと32bit起動するわけです。

※バッチに echo %PROCESSOR_ARCHITECTURE% と入れるとどっちで起動しているか分ります。
"AMD64"が64bit,"x86"が32bitです。


#include "hsp3_64.as" // ←これを足す chdir dir_cur notesel bat noteadd "sfc /scannow" noteadd "openfiles" noteadd "pause" notesave "hspbat.bat" notesel admin noteadd "powershell start-process hspbat.bat -verb runas" notesave "hspadmin.bat" exec "hspadmin.bat", 16
※batファイルは実行フォルダ(初期カレント)にしました。


実行したバッチのタイトルバーをよく見てみてくださいませ cmd.exeですが、
system32 と SysWOW64 と関連付け実行されたexeのパスが微妙に違うと思います。
私の例ではsystem32と表示されるはずです。

ここでややこしい話なのですが、以下のようになってます。
------------
system32 : 64bit
SysWOW64 : 32bit (64bitで動かす32bit)
------------
です。
これはWindowの歴史の話が絡んでくるので詳しい話は割愛しますが、
とりあえず、64bitアプリケーションとしてHSPで作ると手っ取り早いと思います。



usagi

リンク

2022/8/24(Wed) 05:03:28|NO.97017

※追記※
ちなみに、”二つのバッチファイルで実行するという処理をしたい”との事で迷ったのですが、
もしも”管理者権限でバッチを実行したい”であれば関連づけされたファイルとして実行ではなく、
直接コマンドプロンプト実行したほうがファイルも1つで増えなくてシンプルかもしれません。
(また、無いとは思いますが関連付けされていない環境の人もいるかもしれませんので)


#include "hsp3_64.as" chdir dir_cur notesel bat noteadd "sfc /scannow" noteadd "openfiles" noteadd "pause" notesave "hspbat.bat" exec "cmd /c powershell start-process hspbat.bat -verb runas" ;←これ



usagi

リンク

2022/8/24(Wed) 05:05:17|NO.97018

すみません。行内の
noteadd "openfiles"
ゴミなので消してくださいませ。(デバックに使用してた消し忘れです)



qwerty

リンク

2022/8/24(Wed) 05:11:23|NO.97019

回答ありがとうございます。
HSPって32bitアプリケーションだったんですね。初めて知りました。
改善策や解説をしてくださりありがとうございました。参考にさせていただきます。
とても分かりやすかったです。ありがとうございました。



usagi

リンク

2022/8/24(Wed) 06:15:06|NO.97020

よかったです。 ついでにcmdからpowershell経由しなくても
直接powershellでもいけます。


#include "hsp3_64.as" file_name = "hspbat.bat" ; 変数変えればいろいろなバッチ実行できる。 chdir dir_cur notesel bat noteadd "sfc /scannow" noteadd "pause" notesave file_name exec strf("powershell start-process %s -verb runas", file_name) ;これ



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