1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

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

やりたかったこと

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で実施。

これで動作した。

結論

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?