2

私の.Net-Windows-Forms-Applicationは、別のユーザーになりすまして実行されています。プログラムは、相互運用機能アセンブリからインスタンス化する別の.net-exeを開始します。相互運用機能アセンブリからインスタンス化しようとすると、外部プログラムがクラッシュします。Shift-RightClick-RunAsOtherUserごとに外部exeを起動し、偽装と同じログインデータを入力すると、プログラムは正常に動作します。

おそらくそれはsthを持っています。私のプロセス開始呼び出しを行うには:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName         = Path.Combine(System.Windows.Forms.Application.StartupPath, exeFile);
startInfo.Arguments        = arguments;
Process process            = Process.Start(startInfo);
process.WaitForExit();

[編集]

クラッシュ の詳細:vmWareと私の開発マシンの場合:例外ウィンドウはなく、何もありません。外部アプリケーションが実行されてから消えます(チェックするためにいくつかのメッセージボックスを入れました)。

顧客のマシンの場合:例外ウィンドウ

Unknown error (0xffff...e)
Win32Exception
System
StartWithShellExecuteEx
  at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
4

1 に答える 1

0

ユーザー名とパスワードがわかっている場合は、プロセスのスタートアップ情報でそれらのプロパティを設定できます。偽装トークンしかない場合は、CreateProcessAsUser ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms682429%28v=vs.85%29.aspx の pinvoke を使用してスタックしていると思います

Process.Start オーバーロードをユーザー名、パスワード、ドメインで開始: http://msdn.microsoft.com/en-us/library/sxf2saat.aspx

PInvoke CreateProcessAsUser にはすでに SO の質問と回答があります: https://stackoverflow.com/a/671368/884862

于 2013-01-30T14:24:54.847 に答える