- PR -

Webアプリからユーザーを偽装してEXEをキックした時のアプリケーションエラーについて

1
投稿者投稿内容
しんのすけ
会議室デビュー日: 2006/06/21
投稿数: 6
投稿日時: 2006-06-21 13:58
はじめまして。よろしくお願いします。

Webフォーム上のボタンをクリックした時に、Webサーバー上のEXEを
指定したユーザーで起動したいと考えています。
しかし、起動しようとするとアプリケーションエラーが発生してしまいます。
何かわかる方教えてください。お願いします。


Insider.NET内「WEBサービスからキックされたEXE内でのDBアクセス」スレッドから
引用:
.NET 2.0 以上であれば、

ProcessStartInfo.UserName
ProcessStartInfo.Password
ProcessStartInfo.Domain
 
に適切な値をセットして Process.Start() で出来ます。


とありましたので、これを使っています。

開発・テスト環境は、XPProSP2、VS2005、ASP.NET C#です。
(まだ必要な情報があれば教えてください。)
ASP.NETは最近はじめたばかりです。

実際のボタンクリックイベントのコードは以下の様に書いています。
目的のEXEでうまくいかなかったため、notepad.exeで検証しています。
コード:

protected void Button1_Click(object sender, EventArgs e)
{
Process process = new Process();
process.StartInfo.FileName = "notepad.exe"; // ※1
process.StartInfo.Arguments = @"C:\test.txt"; // ※2
process.StartInfo.UserName = "username";
SecureString ss = new SecureString();
ss.AppendChar('p');
ss.AppendChar('a');
ss.AppendChar('s');
ss.AppendChar('s');
process.StartInfo.Password = ss;
process.StartInfo.Domain = "KAIHATSUPC";
process.StartInfo.UseShellExecute = false; // これを入れないとビルドできない。
process.StartInfo.LoadUserProfile = true; // ※3
process.Start();
}


このコードをVS上でデバック(ソリューション構成はDebugもReleaseもためしました。各設定はデフォルトです。)
した時は、IE上に表示されたボタンをクリックすると、※2のファイルが開かれたメモ帳が立ち上がり、
タスクマネージャのプロセスタブにも、指定したusernameが表示されます。

このソリューションにセットアッププロジェクトを追加して、セットアップを作成し
開発マシンと他のマシンにインストールを行いました。
(他のマシンの時はユーザー名、パスワード、ドメイン名はそちらにあわせてます。)

ボタンが表示されるWebページまではアクセスできるのですが、ボタンをクリックすると
アプリケーションエラーダイアログが表示され起動できません。。
「アプリケーションを正しく初期化できませんでした(0xc0000142)[OK]をクリックしてアプリケーションを終了してください。」
本来起動したいEXEでも同様です。
この時(ダイアログ表示中)もタスクマネージャのプロセスタブに、notepad.exeが指定したusernameでが表示されます。
「アプリケーションを正しく初期化できませんでした。」を検索したところ、エラー番号は違いますが
.NET Frameworkのが壊れていたり、バージョンが古かったりするようなのですが
デバックした開発マシンでもエラーがでるので考えにくいと思います。
インターネットインフォメーションサービス管理ツールでインストールしたサイトのASP.NETのバージョンも2.0に
なっていることを確認しました。(1.1にするとWebページも表示されませんが)
ユーザー名などを間違えた場合は、例外が発生することも確認しました。

※1をフルパス(system32内、WINDOWS内、コピーしてCドライブ直下でためしました。)に変更したり
アクセス権をEveryone、IUSR_、IWAM_ などに与えてみたり
※2を""に変更したりしてみましたが、同様でした。

Windowsフォームで試してみたところ、問題なく起動できました。

ASP.NETでは使用できないのでしょうか?それとも何か設定が必要なのでしょうか?

また、本来起動したいEXEでは、EXEの中でレジストリのCURRENT USERを見に行くので※3は必要だと考えています。
※3の行をコメントアウトしても同様でした。
またSQLサーバーにアクセスも行いますので注意点があれば教えてください。

よろしくお願いします。

[ メッセージ編集済み 編集者: しんのすけ 編集日時 2006-06-21 14:02 ]
しんのすけ
会議室デビュー日: 2006/06/21
投稿数: 6
投稿日時: 2006-06-21 14:21
もっといい方法があれば上記の方法に執着する気はないのでよろしくお願いします。

EXEを起動するユーザーは、ファイル等で保存しておいて、
実行時に読み込んで指定できるようにしたいです。

ASPNETユーザーでない、通常の追加したユーザーでWindowsにログオンして
EXEに引数付きで実行して、処理終了後にログオフするのと同じことが
Webアプリのボタンをクリックすることで行えるようにしたいです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-21 19:25
 サーバ コードが実行されるところと、IE が実行している場所を考えて見てください。

 メモ帳は、どこで実行されるのでしょう?
 それを、どこで見ようとしているのでしょう?
しんのすけ
会議室デビュー日: 2006/06/21
投稿数: 6
投稿日時: 2006-06-22 08:29
引用:

Jittaさんの書き込み (2006-06-21 19:25) より:
 サーバ コードが実行されるところと、IE が実行している場所を考えて見てください。

 メモ帳は、どこで実行されるのでしょう?
 それを、どこで見ようとしているのでしょう?



Jittaさん返信ありがとうございます。
「ところ」「場所」っていうのは、物理的なマシンのことでしょうか?

ボタンのクリックイベントの中身はサーバー側で実行されると
思っています。偽装しないファイルの読書きやEXEの実行は問題ありませんでした。
今回メモ帳で検証しましたが、ブラウザ側のマシンで見れる必要はありません。
実際は、サーバー側でファイルの読み書き、データベースアクセス、
データの集計、印刷などが行いたいと思っていますので。

WebアプリやASP.NETの理解が足りていないかもしれませんので
質問の意図と違ったら教えてください。

後書き忘れていました。
アプリケーションエラーダイアログが表示されるのはサーバーです。

[ メッセージ編集済み 編集者: しんのすけ 編集日時 2006-06-22 08:30 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-22 22:00
 対象のアプリケーションは、ウインドウを持っているのでしょうか?
少なくとも、「メモ帳」は、ウインドウがありますよね。
その為、「アプリケーションを正しく初期化できませんでした」が出ていると思われます。
(「表示するべきところがない」ということ)
Console アプリケーションを作成し、cmd ウインドウも出ないようにして、試してみてください。
サーバに、適当なアカウントでローカル ログオンしていたら大丈夫かもしれません。
しんのすけ
会議室デビュー日: 2006/06/21
投稿数: 6
投稿日時: 2006-06-26 08:43
Jittaさんありがとうございます。

対象のアプリケーションは基本的にウィンドウは持っていません。
引数に指定した文字列をファイルに保存するだけのコンソールアプリで試したり
Process.StartInfoに、ウィンドウを作るかのプロパティ(CreateNoWindow)を設定したり
してみましたがうまくいきませんでした。
Webサーバーに偽装したユーザーでログオンしていたり
管理者権限のユーザーでログオンしていたりしてみましたが同じでした。


現在は、偽装をあきらめASPNETユーザーで実行しようとかんがえています。

[ メッセージ編集済み 編集者: しんのすけ 編集日時 2006-06-26 08:44 ]
1

スキルアップ/キャリアアップ(JOB@IT)