C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ASP .NET Webアプリケーションから実行ファイルを動 /ごう (17/03/16(Thu) 09:06) #83270
Re[1]: ASP .NET Webアプリケーションから実行ファイルを動 /WebSurfer (17/03/16(Thu) 12:39) #83287
  └ Re[2]: ASP .NET Webアプリケーションから実行ファイルを動 /???? (17/03/17(Fri) 08:44) #83316
    ├ Re[3]: ASP .NET Webアプリケーションから実行ファイルを動 /魔界の仮面弁士 (17/03/17(Fri) 10:04) #83318
    └ Re[3]: ASP .NET Webアプリケーションから実行ファイルを動 /WebSurfer (17/03/17(Fri) 11:34) #83323


親記事 / ▼[ 83287 ]
■83270 / 親階層)  ASP .NET Webアプリケーションから実行ファイルを動
□投稿者/ ごう (23回)-(2017/03/16(Thu) 09:06:11)

分類:[ASP.NET (C#)] 

サーバOS:Windows Server 2012
クライアントOS:Windows7または10

ASP .NET(C#)で動いているWebアプリケーションがあります。
ここで、ボタンクリックをトリガーとし、サーバ内の実行ファイル(exe形式)を実行させるようにしたいです。

当方でもProccessクラスを使って試してみたのですが、
アクセス権の問題?のようで、実行ファイルを起動させることができませんでした。

参考としたページ
https://social.msdn.microsoft.com/Forums/ja-JP/c74f9d88-8abd-4526-9d7c-d3c110da9d43/aspexe?forum=aspnetja

このような処理を実現したい場合、どの様な点に注意したらよいか教えてください。

[ □ Tree ] 返信 編集キー/

▲[ 83270 ] / ▼[ 83316 ]
■83287 / 1階層)  Re[1]: ASP .NET Webアプリケーションから実行ファイルを動
□投稿者/ WebSurfer (1173回)-(2017/03/16(Thu) 12:39:47)
No83270 (ごう さん) に返信

Web Forms アプリですか? Visual Studio, .NET のバージョンは何ですか?

> サーバ内の実行ファイル(exe形式)を実行させるようにしたいです。

具体的にどういう exe ですか?

> 当方でもProccessクラスを使って試してみたのですが、
> アクセス権の問題?のようで、実行ファイルを起動させることができませんでした。

開発環境で IIS Express 上で Web アプリを動かすした場合どうなりますか?

アクセス権の問題とはどういう根拠でそう思われたのですか?

起動させることができなかったというのは、何を見てどういう判断をして確認されたの
ですか? 例外などがスローされるならどういう例外か分かりませんか?

なんとなく、プロセスがユーザー対話モードで実行されていないのに UI を表示しよう
として失敗したという気がするのですが(気がするだけで、もちろん確証などはありま
せんが)、そのあたりは問題ないですか?

ユーザー対話モードで実行されていない場合 Environment.UserInteractive プロパティ
は false になるので、それで確認できると思います。(ちなみに IIS のワーカープロ
セスでは false になります)

> このような処理を実現したい場合、どの様な点に注意したらよいか教えてください。

開発環境では IIS Express ではなくローカル IIS を使って、サーバーにデプロイする
前に十分なテストを行ってください。

そして開発環境で問題が発生して原因が分からなければ、そして問題を再現するのに不要
なコードはどんどん削っていって、問題を再現するのに要最低限のコードにした簡単な
サンプルを作ってください。その過程で原因が見つかって自己解決できること尾が多いは
ずです。見つからなくても、そのコードをアップすれば質問者の方でも検証ができるので、
助言が得やすいと思います。  
[ 親 83270 / □ Tree ] 返信 編集キー/

▲[ 83287 ] / ▼[ 83318 ] ▼[ 83323 ]
■83316 / 2階層)  Re[2]: ASP .NET Webアプリケーションから実行ファイルを動
□投稿者/ ???? (2回)-(2017/03/17(Fri) 08:44:25)
No83287 (WebSurfer さん) に返信
> Web Forms アプリですか? Visual Studio, .NET のバージョンは何ですか?

Webフォームアプリです。
既存のパッケージシステムをカスタマイズしています。
(メソッド等のコードを既存のシステムに管理者モードでログインして記述する)形式です。
Visual Studioは使用していません。

.NET のバージョンは4.5です。



>>サーバ内の実行ファイル(exe形式)を実行させるようにしたいです。
>
> 具体的にどういう exe ですか?

サーバ上でファイルを生成するexeです。(自作)


> 開発環境で IIS Express 上で Web アプリを動かすした場合どうなりますか?

開発環境=サーバになります。



> アクセス権の問題とはどういう根拠でそう思われたのですか?
>
> 起動させることができなかったというのは、何を見てどういう判断をして確認されたの
> ですか? 例外などがスローされるならどういう例外か分かりませんか?

サーバ側でexeに対応するプロセスが見つからず、
exeが出力するはずのファイル、ログも書き込まれなかったため
「起動させることができなかった」と判断しています。
  
[ 親 83270 / □ Tree ] 返信 編集キー/

▲[ 83316 ] / 返信無し
■83318 / 3階層)  Re[3]: ASP .NET Webアプリケーションから実行ファイルを動
□投稿者/ 魔界の仮面弁士 (1196回)-(2017/03/17(Fri) 10:04:34)
No83316 (???? さん) に返信

投稿者名が化けていますが、ごうさんでしょうか。

Firefox を使っているのだとしたら、IE や Chrome などを
使うようにすると、投稿者名が化けずに済みますよ。

# Child Tree 側の cookie 処理を見直せば対処できるようですが
# 現状でそれは望めないので…。


> exeが出力するはずのファイル、ログも書き込まれなかったため
> 「起動させることができなかった」と判断しています。

ログと言うのはファイルに対してでしょうか、それとも Windows イベントログでしょうか。

ファイルを出力するフォルダに対して、NTFS アクセス制御リスト (ACL) にて
書き込みアクセス権を確保してあるかを確認してみて下さい。
もちろん、exe ファイル自身に対する実行と読み取り許可も必要ですし、
レジストリを利用しているなら、レジストリエントリへのアクセス権も必要です。

スレッドを実行しているアカウントは、下記で取得できます。
System.Security.Principal.WindowsIdentity.GetCurrent().Name

アプリケーションプールが ApplicationPoolIdentity に割り当てられている場合は
"IIS APPPOOL\アプリケーションプール名" が返されると思います。


特定の実行アカウントに対して許可を与えるのか、
グループに対して許可を与えるのかはお好みで。
http://blog.shibayan.jp/entry/20150127/1422369253
https://social.technet.microsoft.com/Forums/ja-JP/a96378ce-cae6-41c9-8503-b1a58316e29c/iusr?forum=iis7ja
[ 親 83270 / □ Tree ] 返信 編集キー/

▲[ 83316 ] / 返信無し
■83323 / 3階層)  Re[3]: ASP .NET Webアプリケーションから実行ファイルを動
□投稿者/ WebSurfer (1175回)-(2017/03/17(Fri) 11:34:45)
No83316 (???? さん) に返信

「ごう」さん=「????」さんと理解して・・・

先の私のレスの質問、

> なんとなく、プロセスがユーザー対話モードで実行されていないのに UI を表示しよう
> として失敗したという気がするのですが(気がするだけで、もちろん確証などはありま
> せんが)、そのあたりは問題ないですか?

に回答していただいてませんが、そこは問題ないと理解していいのですか? もし、問題
があればまずそれを解決しないと先に進めませんが・・・


上記の点は問題ないとすると、質問者さんが想像したようにアクセス権の問題があると思
います。 exe というのは、

> サーバ上でファイルを生成するexeです。(自作)

とのことですから、ファイルを生成するフォルダに対してワーカープロセスが書き込み権
限を持ってないと失敗するはずです。

権限を与える方法は以下の記事の「ファイル アクセス」のセクションを見てください。

How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
https://msdn.microsoft.com/ja-jp/library/ms998320.aspx

上の記事は少々古いので「Network Service アカウント」となっていますが、IIS7.5 以降
はデフォルトで「アプリケーション プール ID」になっています。詳しくは以下の記事を見
てください。

アプリケーション プール ID
https://technet.microsoft.com/ja-jp/library/ee886292.aspx

(IIS の設定を変えれば NetworkService、LocalSystem、特定のユーザーアカウント等に
できますので、質問者さんの環境で IIS Manager を使って、当該アプリケーションプール
の詳細設定を見て調べてください)


フォルダが Web サーバーとは別マシン(例:ファイルサーバーの共有フォルダ)にある場
合はちょっと問題かと思います。

Web サーバーもファイルサーバーも Active Directory ドメイン環境下にある場合は、上に
紹介した記事に書いてあるように、NetworkService やアプリケーションプール ID はネッ
トワーククレデンシャルを持っているので、コンピューターアカウントを使用してネットワ
ークリソースにアクセスすることができます。


ワークグループ環境では、ネットワークリソースに NetworkService やアプリケーションプ
ール ID を使ってアクセスするのは無理っぽいです。

Process.Start で起動する別プロセスに有効かどうかわかりませんが、ASP.NET 偽装を試し
てみてはいかがでしょう?

他には、これも試したわけではないのでうまくいくかどうかわかりませんが、以下のような
方法もあるそうです。

別ユーザーで外部アプリケーションを起動する
http://dobon.net/vb/dotnet/process/startwithusername.html

[ 親 83270 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -