20

私の現在の状況は、ASP.net/C# API をホストする IIS を使用して、リモート サーバーで exe (ローカルの .txt ファイルを作成する) を実行する必要があるということです。リモート サーバーで Web サービスを実行するためにローカル ユーザー (たとえば userA) を管理者として作成しましたが、.txt ファイルが作成されませんでした。必要なフォルダ権限を確認して userA に付与し、そのユーザーをさまざまなグループに追加しました。面白いことに、リモート システムで userA としてログインすると、exe が期待どおりに実行されます。ログアウトすると失敗します。サーバーは、IIS 7 を搭載した Win サーバー 2008 です。

更新:問題を解決し、回答と関連する問題へのいくつかのリンクを SO に投稿しました。つまり、IIS アプリ プールで「ユーザー プロファイルの読み込み」を true に設定する必要がありました。

みんなの貢献に感謝

編集:コメントから抽出されたコード

Process proc = new Process(); 
proc.StartInfo.FileName = path; 
proc.StartInfo.Arguments = exeparams; 
proc.Start(); 
proc.WaitForExit(); 
stat = proc.ExitCode; 
if (stat != 0) 
{ 
    throw new Functions.log("Error"); 
} 
4

2 に答える 2

14

更新: 何週間も経ってから問題を解決できました。ご協力いただきありがとうございます。どうやら IIS はデフォルトで Windows ユーザー プロファイルをロードしないようです。そのため、ログオンしていない別のユーザーとして実行する場合、その Windows プロファイルは IIS によって読み込まれる必要があります。アプリ プールの詳細設定メニューに、「windows プロファイルを読み込む」オプションがあります。これを true に変更しました。IIS の以前のバージョンでは、これはデフォルトで「true」に設定されていました。

同じソリューションを使用した SO に関する関連する質問:

1) ASP.NET のセキュリティ例外と IIS 7.5 の [ユーザー プロファイルの読み込み] オプション

2) IIS7 で asp.net Web アプリケーション プロジェクトを実行すると例外がスローされる

3)新しい展開での System.Web.AspNetHostingPermission 例外

別の 4) http://geekswithblogs.net/ProjectLawson/archive/2009/05/05/iis-system.web.aspnethostingpermission-exception-on-windows-7-rc.aspx

于 2012-12-03T06:18:23.607 に答える
8

Process.Start を使用できます

Process process = new Process();
process.StartInfo.FileName = "CVS.exe";
process.StartInfo.Arguments = "if any";
process.Start();

asp.net で別のユーザーとしてプロセスを実行することに関する投稿もあります。

http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx

ユーザー資格情報の提供

つまり、次のようなコードを使用して、プロセスをリダイレクトする必要があると言われています。

ProcessStartInfo info = new ProcessStartInfo("cmd.exe");

info.UseShellExecute = false;

info.RedirectStandardInput = true;

info.RedirectStandardError = true;

info.RedirectStandardOutput = true;

info.UserName = dialog.User; // see the link mentioned at the top

info.Password = dialog.Password;

using (Process install = Process.Start(info))

{

      string output = install.StandardOutput.ReadToEnd();

      install.WaitForExit();

      // Do something with you output data

      Console.WriteLine(output);

}
于 2012-12-01T10:39:34.533 に答える