質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

4440閲覧

ASP.NETのサイト上の batファイルを動作させたい

saya24

総合スコア222

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/07/17 14:17

編集2020/07/18 00:57

運用環境:Windows Server 2016 Standard / IIS Ver10.0 / ASP.NET 4.0

Process.Startにより サーバ上の目的の実行ファイルを起動できない、というありがちな話題です。

Windows Server 2016 Standard / IIS Ver10.0に移行したら動かなくなった、と言う問題ではなく
初めてASP.NETの稼働環境内でBATファイルを起動したい、というスタンスでご支援を頂けたら幸いです。

teratail含め 記事を模索したのですが 理解力が乏しく対策が分からなかったので掲載させて頂きました。

【質問】
どういった対策をほどこせば Process.Startに引数を与えたバットファイルは 動作するようになりますか?
動作させたいバットファイルのパスは通っていることを確認しています。

『自分が疑ったこと』
手元のWeb.configに 前任者が記載しただろう 以下の定義があるがダメ=batファイル内部に記載している実行ファイルは起動に至っていない認識(その実行ファイルはログを吐くタイプのものだが ログファイルが吐かれていない)

config

1<identity impersonate="true" userName="XXXXX\XXXXXXXX" password="XXXXXXXXXXX"

(この定義は ASP.NETのワーカープロセスを偽造するものでしょうか)

当該batファイルのプロパティ:セキュリティタブで 何か特殊なユーザを追加すべきでしょうか?
標準出力があるタイプのファイルはクライアントから起動できない、という問題なのでしょうか?

よろしくお願いします。

2020.07.18 08:34 追記 【Process.Start実行部分 と バットファイルの中身』

起動したいバットファイルにパスが通っているハズ、という判断は 以下で存在チェックを行った上で Process.Startを行っているためです...
こちらが記述されているのは ajaxToolkitのAsyncFileUploadコントロールのUploadedCompleteイベント内です。

VB

1Dim startupScript As String 2Dim savepath As String = Server.MapPath("./") 3If File.Exists(savepath & "T_LOTINFO.bat") Then 4 Process.Start(savepath & "T_LOTINFO.bat") 5 System.Threading.Thread.Sleep(2000) 6 startupScript = "<script language='JavaScript'> confirm('アップロードが完了しました。') <" + "/script>" 7 ClientScript.RegisterStartupScript(Me.GetType(), "key1", startupScript) 8Else 9 startupScript = "<script language='JavaScript'> alert('これはダメかも知れないね....') </script>" 10 ClientScript.RegisterStartupScript(Me.GetType(), "key1", startupScript) 11End If

バットファイル中身、この一文です。
Webサーバ上で手動でこちらを動作させると起動し、SQLLDR.exe特有のログファイルが このバットファイル配置環境(同じパス)に仕上がってきます。ちなみに、以下のバットファイルの初めに pause入れて試しましたが コマンドプロンプトの画面が立ち上がってくることはありませんでした。
Webページから起動された場合は ログファイルが出力されないので 起動していない、という判断をしています。

bat

1SQLLDR USERID=XXXXX/XXXXXX@XXX, CONTROL=T_LOTINFO.ctrl

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/07/17 14:34

質問が意味不明です ききたいことはなんでしょうか。
dodox86

2020/07/17 18:05

その前任者氏が担当されていたときは動作していたのではないですか? Windows Server 2016 Standard / IIS Ver10.0に移行したら動かなくなった、と言う問題ですか? それとも今回初めてASP.NETの稼働環境内でBATファイルを起動したい、と言うことになったのでしょうか。 > 標準出力があるタイプのファイルはクライアントから起動できない、という問題なのでしょうか? ログを吐き出す、についてですが、標準出力をリダイレクト(">")でログファイルに保存しているBATファイル、と言うことでしょうか。Process.Startだと既定の呼び出し方では標準入出力のハンドルはセットされないので、使えていないのだと思います。どのようなBATファイルなのか内容を示せば、より適切な回答が得られると思います。
退会済みユーザー

退会済みユーザー

2020/07/17 21:48 編集

BAT ファイルの内容、それを ASP.NET のどのようなコードで、どのようなタイミングで動かしているか、期待する動きと実際の結果はどうなっているかをできるだけ詳しく書いてください。 今提供されている情報では、閲覧者・回答者は質問者さんと一緒に想像の世界で迷走することになりかねません。
saya24

2020/07/17 23:31

皆さま ありがとうございます、後ほど本文にASP.NET側のコード(VB.NET)とバットファイルの中身を追記致します。バットファイルの中身はORACLE社製SQLLDRというexeの 起動1文です(区切り文字ファイルのデータベースへのインポートに利用)。 申し遅れましたがASP.NET4.0のWebサイトです。バットファイルを起動しようとしている部分は 私が今回新設したWebページ以外見受けられません。 かつて2008R2 Serverで運用されていたサイトですが その際にもバットファイルを起動するWebページはなかったはずです。
退会済みユーザー

退会済みユーザー

2020/07/18 00:06

dodox86 さんの質問の前半部分に答えてください。
saya24

2020/07/18 00:16

dodox86さんのへの回答が 不十分でしたので 補足致します。 かつてWindows Server 2008R2で運用されていたサイトですが その頃にバットファイルを起動するページはなかったはずで Windows Server 2016 Standard / IIS Ver10.0に移行したら動かなくなった、と言う問題ではありません。 今回初めてASP.NETの稼働環境内でBATファイルを起動したい、というスタンスでご支援を頂けたら幸いです。
退会済みユーザー

退会済みユーザー

2020/07/18 00:51

上記のことを質問欄を編集して追記してください。
saya24

2020/07/18 00:58

本文への追記完了しました
guest

回答1

0

ベストアンサー

IIS のワーカープロセスはユーザー対話モードで実行されていないので、ユーザーが対話するためのグラフィカルユーザーインターフェイスを使うものは動きません。

ASP.NET で MessageBox を表示しようとして、開発環境の IIS Express では動くが運用環境の IIS では動かないという話を聞いたことはありませんか?

SQLLDR もそれと同じことではないのですか?

投稿2020/07/18 01:32

編集2020/07/18 02:17
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saya24

2020/07/18 02:05 編集

ご見解をありがとうございます。SuferOnWwwさんが開発環境でもIISを極力利用することを推奨する記事は見かけたことがありますが MessageBoxの話題は まだおみかけしていないです。 しかし話はよく分かりました。 SQLLDRについて もうちょっと調べてみます。
退会済みユーザー

退会済みユーザー

2020/07/18 02:18 編集

「見解」ではなく「回答」です。 SQLLDR というのは初めて聞きましたが、ググって調べて「SQL Loader はユーティリティであり OS のコマンドラインから実行する」という記事を目にしました。それを見て回答してますので、自信度 70% ぐらいはあります。
saya24

2020/07/18 02:20

頼もしいです!ご回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/07/18 02:22

そのレス、馬鹿にされてるような気がするのですが、考えすぎですか?
saya24

2020/07/18 02:23

考えすぎです。ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/07/18 02:38

その発言に気分を害したということは覚えておいてください。
saya24

2020/07/18 02:43

失礼をしました、覚えておきます。
dodox86

2020/07/18 03:03

>質問者さん 「ユーザー対話モードではない」とは、要は普通の人間がWindowsにログオンして目にしているデスクトップ画面が無いことを指します。それに加えて標準入出力は通常、コンソールが無いとやり取りできません。IISはWindowsサービスとして動いているので、IISのプロセスに"Impersonate"で偽装してユーザーの権限を与えることはできてもそれらの環境が無く、単なる標準入出力、リダイレクトを使ってもアクセスできません。SQLLDR(SQL*Loader)の実行時、それらを利用しないよう実行スクリプト内で直接、ファイルの出力先を絶対PATHで指定するなりすれば対応できるかもしれません。反対に、SQL*Loaderが内部で標準入出力を自らリダイレクトするような処理になっていた場合、やはりできない可能性もあります。Process.Startの実行時のProcessStartInfoの設定内容も併せて確認してみることをお勧めします。私から補足程度にできるコメントは以上です。
saya24

2020/07/18 04:04

dodox86さん 分かりやすい説明をありがとうございます。 2018/3/22に別の方とやりとりされている記事と併せ 制約が分かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問