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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0315
Masa外部ファイルの Windows8 での実行について9解決


Masa

リンク

2014/3/15(Sat) 18:03:50|NO.60679

お世話になります。
以下のようなプログラムがあります。

aa="C:\\Program Files\\○○○○\\××××.exe"
exec aa

このプログラムを Windows XP や Windows7 で実行すると aa で指定した外部ファイルがきちんと実行されるのですが、これを Windows8 系環境で実行すると、次のようなエラーメッセージが表示されてしまいます。

#Error 14
-->内部エラーが発生しました(14)

原因と対処方法を調べていますが、全く分かりません。
対処方法を教えて頂けますと大変助かります。

どうかお願い致します。



この記事に返信する


Masa

リンク

2014/3/15(Sat) 18:06:57|NO.60680

因みに、以下のようにしても結果は同じで、エラー 14 になります。
フォルダ構成やファイル名は同一のものです。

aa=dirinfo($10026)+"\\○○○○\\××××.exe"
exec aa



YSR

リンク

2014/3/15(Sat) 19:45:46|NO.60685

エラー14は「外部ファイル呼び出し中のエラーです」という意味です。
パス名からして、ひょっとしてファイル権限の都合で蹴られているのでは……?
・Win8上でスクリプトエディタを介して起動した際も同じエラーが出ますか?
・管理者権限でソフトを起動(注:右クリックから可能)しても同じエラーがでますか?



Masa

リンク

2014/3/15(Sat) 20:53:01|NO.60689

ご教示頂きましてありがとうございます。
この、エラー 14 が Windows8 で出るという現象は、他の方から頂いた情報です。
そこで、まず exec 命令で実行しようとしているプログラムのパスが間違いないかを確認する為に dialog 命令などを使ってパスを取得するプログラムを作って、その方にそれをお渡ししてパスをこちらに送って頂きました。
そのパスに間違いがなかった為、次にこちらの掲示板で示した(次の)プログラムを作成してその方に実行して頂きましたが、エラー 14 となるとのことでした。

aa="C:\\Program Files\\○○○○\\××××.exe"
exec aa

手元に Windows8 がなくスクリプトエディタを介して起動する、という実験をすることはできないのですが、管理者権限でソフトを起動しても同じエラーが出るか?を試すようにお願いを、その方にしています。(返事待ちです。)

もし管理者権限でソフトを起動しても同じエラーが出るとしたら、原因や対処方法としてどのようなことが考えられますでしょうか?



え?

リンク

2014/3/16(Sun) 00:32:48|NO.60697

まず、なにがやりたいのかをはっきり言わないと
Windows 8 に対応したソフトを作りたいんですか?
ほかの人にやってもらっているってことの意図がわかりません。



KA

リンク

2014/3/16(Sun) 06:00:14|NO.60701

1:win8には存在しない。
2:win8ではファイル名が異なる。
3:win8ではフォルダ名が異なる。
4:システムドライブがcではなかった。
5:実はwin8rtだった。


C:\Program Files\○○○○\××××.exe
を、「ファイル名を指定して実行」させましょう。



MillkeyStars

リンク

2014/3/16(Sun) 11:11:43|NO.60703

再現できた。
元々管理者権限を必要としている実行形式ファイルを、hsp の exec を用いて、通常権限から起動させるとエラー14になるね。
(ファイルプロパティの互換性、特権レベルチェックオン)
たぶん、UAC UI(consent.exe) が機能しなくて、エラーを引き起こしていると思われる。

HSP側を管理者権限で起動すればいいけど、確か HSP から起動するプロセスは権限継承するので、むやみやたらに管理者権限で起動しようとしないでね。
(悪さをするプロセスを管理者権限で間違って起動するとあぎゃーーー!!!)



Masa

リンク

2014/3/16(Sun) 12:03:46|NO.60706

皆様、親身に相談にのって下さってありがとうございます。
そして説明不足ですみませんでした。
わたしも KA さんがご指摘下さったような1〜4の可能性があると思い、外部ファイルのパスを dialog 命令などを使って取得するプログラムを作って確認しました。
そこで C:\Program Files\○○○○\××××.exe という結果が出てきましたので、決め打ちでそのパスを exec 命令で実行、しかしエラー 14 だった為、
aa=dirinfo($10026)+"\\○○○○\\××××.exe" : exec aa や
exec dirinfo($10026)+"\\○○○○\\××××.exe" といったプログラムで実行しようとしましたが、どちらもエラー 14 でした。
念の為に確認したところ、Windows8 RT ではないとのことでしたので MillkeyStars 様のおっしゃるように、HSP 側を管理者権限で起動しなくてはいけないのかもしれません。
助言と検証ありがとうございました。

例えば、HSP で aaaa.exe から bbbb.exe を実行し、さらに bbbb.exe からべつの階層に(フォルダの外のべつのフォルダ)ある cccc.exe や dddd.exe を実行しても、HSP 側を管理者権限で起動すれば順番に権限が継承していくのでしょうか?
どの範囲まで管理者権限が継承されるのでしょうか?

追伸
管理者権限での実行は必要最小限にし、むやみやたらに管理者権限で起動しようとしないようにします。
ありがとうございます。



MillkeyStars

リンク

2014/3/16(Sun) 13:37:27|NO.60708

プロセス権限継承は、基本的に継承させない方式で新たなプロセスを起動すれば継承されません。
ただ、HSP の exec は、exec を実行するプロセスの権限を継承しますので、そこから起動したプロセスの権限は継承されます。

aaaa.exe (メイン)

exec "bbbb.exe"

bbbb.exe (aaaa.exe の権限を継承したプロセス)

exec "cccc.exe"

cccc.exe (bbbb.exe の権限を継承したプロセス)

・・・・・・以下同文。

おおざっぱに言えば、プロセスの権限情報をコピーしているってことかな。
元が管理者権限であれば、そこから作ったプロセスも管理者権限になるってこと。

また、このプロセスの権限は、フォルダ階層には影響しません(一般的に)。
ただ、フォルダ・ファイルが管理者にのみ閲覧が許可されている場合などに管理者権限が影響します。
(管理者しか見れない一部フォルダなど)

参考にだけど、コマンドプロンプト(cmd) を管理者権限がある状態でやってみればわかります。
管理者権限で起動している場合、コマンドプロンプトのタイトルバーに「管理者」が付与されます。



Masa

リンク

2014/3/16(Sun) 16:40:09|NO.60710

詳しくご教示下さいましてありがとうございます。
今回の MillkeyStars 様のご説明で継承の仕組みが理解できました。

権限情報がコピーされて管理者権限が継承していくことはとても便利ですね。
もちろん MillkeyStars 様がおっしゃられていましたように、むやみやたらにプロセスを管理者権限で起動しようとしてはいけないと思いますので、その辺りは充分に気を付け、必要最小限度にしたいと思います。

権限継承の仕組み、HSP の exec の仕様を分かりやすく説明して下さいましてありがとうございました。



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