c#-Internet Explorerプロセスを別のユーザー、la / netonlyとして起動するにはどうすればよいですか?

WPFアプリから別のユーザーとしてInternet Explorerを起動しようとしているため、ユーザーが(内部)Webサイトにアクセスすると、統合Windows認証を介してサイレント認証が行われます。

他のユーザーとしてiexplore.exeを起動したくないのは、コンピューターでプロセスを初めて起動し、IE7 / 8を初めて設定しようとすると、奇妙な展開/環境の問題が発生するためです。ただし、すべてのマシンのすべてのIEインストーラーをミュートする方法のソリューションがあれば、ぜひ聞いてみてください。

意図した質問に戻ります。 runasを使用して、コマンドプロンプトからIEのなりすまし動作を正確に取得することができます(https://serverfault.com/questions/70376/runas-domain-account-still-asks-for-passwordに感謝)。

c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe

*注:多くの理由により、WPFアプリにrunasを使用することはできませんが、最終結果は私が望むものです。

とにかく、runas / noprofile / netonly iexplore.exeを実行するC#の同等のコードが欲しいです。

CreateProcessWithLogonWでP / Invokeを使用して途中にいます。これは私が持っているものです:

uint LOGON_NETCREDENTIALS_ONLY = 2;
var lpStartupInfo = new CreateProcessWithLogonW_PInvoke.STARTUPINFO();
CreateProcessWithLogonW_PInvoke.PROCESS_INFORMATION processInformation;

CreateProcessWithLogonW_PInvoke.CreateProcessWithLogonW(
                userName,
                domain,
                pw,
                LOGON_NETCREDENTIALS_ONLY,
                null,
                commandLine,
                0,
                null,
                null,
                ref lpStartupInfo,
                out processInformation);

これによりInternet Explorerが正常に起動しますが、ユーザーになりすましているようには見えません。 runasコマンドを使用してユーザーになりすますことができるため、認証の失敗はIE / zone / password / IIS設定ではなく、CreateProcessWithLogonWの呼び出しで行っていないことだけです。 ()。

私が気づいたことの1つは、runas / netonlyコマンドは、/ noprofileスイッチを追加した場合にのみ機能することです。 C#のP / Invokeを介してこのスイッチに相当するものを設定する方法がわかりません。

どちらのソリューション(「IEを初めて起動したときにウィザードを実行する」を解決するか、見つからないweirdo P / Invoke設定を見つける)でヘルプをいただければ幸いです。

ベストアンサー
さて、私は非常に近かった。魔法の修正は、iexplore.exe呼び出しに-noframemergingを追加することです。これは、それが何をするのかわかりませんが、「プロセスフレーム」というフレーズを使用します。

いずれにせよ、これは解決されたようです。

var arguments = "-noframemerging " + url;
var pathToIExploreExe = GetFullPathToIExploreExe();
var commandLine = string.Format("\"{0}\" {1}", pathToIExploreExe, arguments);

uint LOGON_NETCREDENTIALS_ONLY = 2;
var lpStartupInfo = new CreateProcessWithLogonW_PInvoke.STARTUPINFO();
CreateProcessWithLogonW_PInvoke.PROCESS_INFORMATION processInformation;

CreateProcessWithLogonW_PInvoke.CreateProcessWithLogonW(
            userName,
            domain,
            pw,
            LOGON_NETCREDENTIALS_ONLY,
            null,
            commandLine,
            0,
            null,
            null,
            ref lpStartupInfo,
            out processInformation);

転載記事の出典を記入してください: c#-Internet Explorerプロセスを別のユーザー、la / netonlyとして起動するにはどうすればよいですか? - コードログ