私は(過去4日間)iis7(asp.net)でプロセスを開始するためのさまざまなオプションをテストしてきました
私は解決策を見つけました。
デスクトップと対話する必要がなく、実行するだけでよい(cmd
またはそのようなものである)限り、ソリューションは単純です。
w3wp
ユーザー->
は高特権ユーザーである必要があります。プロセス開始情報(
StartInfo.Username
)も高特権ユーザー->
である必要があります。
ただし、(私のテストによると)落とし穴があります。
両方のユーザーが同じである必要があります(
cmd
実行する場合)。これが機能する唯一の方法です。
だからここに私の2つの質問があります:
なぜそれらは両方とも同じでなければならないのですか?HighPriviligedとして(process.startInfoを介して)HighPrivilegedを実行することはできませんか?
USerA
cmd
USerB
両方のユーザーはドメイン管理者です(これは私のローカルグループの管理者でもあります)。ドメイン管理者/ローカル管理者のみがローカルマシンでプロセスを実行できますか?
psすべてのフォルダーのアクセス許可はeveryone : full controll
(c:\windows\*.* /s
cmd.exeアクセス許可を含む)であり、前述のように、両方のユーザーは同じクローンアクセス許可を持つローカルマシンの管理者です。IIS7ハンドラーマッピング*
[静的ファイル]は読み取り+実行に設定されます
また、完全なcmdコマンドは次のとおりです。
cmd /c time /t >c:\1.txt
。成功とは、ファイルが存在する場合です(そして、両方のアカウントが同じである場合にのみ成功します)。
完全なコード:
Process proc = new Process();
proc.StartInfo.FileName = "cmd";
proc.StartInfo.UserName = "Royin"; //<-- only if this user is the same as w3wp user , the operation succeed !
proc.StartInfo.Domain = ...;
proc.StartInfo.WorkingFolder = @"c:\windows\system32";
proc.StartInfo.Password = ...
proc.StartInfo.Arguments = @"/c time /t >c:\1.txt"
proc.Start();