ブラウザからサーバ上のEXEを実行するにはどうするの?
ブラウザからサーバ上のEXEを実行するのは意外と難しい!
ユーザーがブラウザからあなたのサイトにアクセスし何らかのアクション(ボタンクリックなど)した場合にサーバ上の特定のEXEを実行しようとすると、さまざまなハードルが発生します。
例えば
アクセス権
コンテキストの環境
などが主なハードルとなります。
プログラムからnotepad.exeなどをコマンドとして実行しても実行できません。
実行するには、実行権限があり、実行ユーザーのコンテキストがある環境での実行が必要となります。
ここでは、IIS+SQLServerを利用している前提で解決策をご紹介します。
つまり、IISなどWEBサーバ上のプログラムから直接EXEを実行するのはサーバ上でさまざまな設定変更がいります。その分、トラブルが発生した場合(EXEが思ったように動かなくなった場合)原因の特定が大変になります。
そこで、WEBサーバ上のプログラム(phpなど)からではなく、SQLServerを使ってEXEを実行するのが一番手軽な方法になるかと思います。
もちろんSQLServer以外のデータベースでも同様の手法が使えるものがありますので、お使いのデータベースソフトのリファレンスをご確認ください。
xp_cmdshellを利用する
結論からいうと、SQLServerのxp_cmdshellというコマンドを利用します。
xp_cmdshellの引数に実行したいEXEを指定すると実行することができます。
xp_cmdshellを利用するには、利用できるように設定を変更することが必要です。
下記コマンドを実行すると利用可能になります。
//権限を設定
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
下記コマンドを実行するとメモ帳が起動します。
xp_cmdshell 'notepad.exe'
利用無料、登録も必要ないので、JSONデータを取り扱う際にはぜひご活用ください。
メモ帳が起動するのを確認できましたら、これで利用可能になりましたので次はプログラムからの実行方法についてお話します。
プログラムから実行する方法はとても簡単です。
通常のSQL文を実行する手順でコマンドを呼び出します。
//EXEを実行
objConn.Execute "xp_cmdshell 'C:\test\AAA.EXE 9'"
このようにするとWEBサーバ上のプログラムからプログラムを呼び出すことで
サーバ上のC:\testフォルダのAAA.EXEを引数'9'を設定して呼び出すことができます。
このような方法を使うと、SQLServerを利用してEXEを実行することでより簡単にさまざまなプログラムとの連携が可能となります。
直接呼び出すのが抵抗ある場合は、ストアドプロシージャにして実行するなどされてみてはいかがでしょうか。