LoginSignup
0
1

More than 5 years have passed since last update.

WEBAPI経由でWindowsサーバ上に配置したBATを実行させようとしたときに想定通りの結果にならなかった話

Posted at

やりたかったこと

Windowsサーバ上で実行させるpythonの処理をAPI経由で呼び出したい

※PythonじゃなくてもなんかしらのEXEでも同じようなことはできるような仕組みにはしておきたい。

やったこと

C#のWEBAPIをIIS上に配置して、それ経由でBATを実行させようとした。
※BATはpythonの処理を引数指定で呼び出す程度のもの
BATにしたのは引数などの調整をする際にAPIのほうを修正するのがめんどくさそうだったから。

呼び出しとしては以下

//プロセス起動
System.Diagnostics.Process p = System.Diagnostics.Process.Start("BATのフルパス", id);
p.WaitForExit();

どうにも起動しない。

APIを呼び出しても起動しない。

以下の順で解決していった。

1. BAT内でxxx.pyを呼び出していたが、どうもpyがPythonと関連づけられていなかった。

Pythonと関連づけられていなかったので、python xxx.py のように記載したが、Pathも設定されていなかった。

→Pythonについてはフルパスで設定。

※ここまでは手動でBATを実行してもうまくいかないのでWEBAPIとかは直接関係ない単なるショボミスな話

2.Pythonをフルパスにしたことで上手くいくかと思ったが、処理結果が想定通りにならない。

手動起動ではうまくいくのでWEBAPI経由だとうまくいかなかった。

Process.Start()で呼び出しているが、起動されていなさそう。

結論としては

WEBAPI経由だとIISユーザとして起動されることになるのだが、それに対する権限を付与してなかった。

→BAT格納フォルダやログ出力フォルダに対してeveryoneのフルコントロール権限を付与。

※正確に権限を付与するのであれば「IIS_IUSRS」にすべきなんだろうけど、とりあえずeveryoneで実施。

これで動作した。

結論

気が付けばどうってことないが、思いつかないと結構ハマった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1