2016-03-31 17 views
3

私はWindowsコマンドプロンプトでコマンドを実行する必要があるWPFアプリケーションを作成しました。したがって、次のコードを作成しました。ファイルのドラッグアンドドロップを実装するために、自分のWPFホストなしで管理者権限を持つプロセスを管理者権限で実行する方法を教えてください。

 // The 'RunAs' indicates it needs to be elevated. 
     var process = Process.Start(new ProcessStartInfo(@"C:\Windows\System32\wevtutil.exe", commandArgs) 
     { 
      //Process will be started as admin 
      Verb = "runAs", 
      //Do not show the shell window 
      CreateNoWindow = true, 
      UseShellExecute = false, 
      RedirectStandardError = true, 
      RedirectStandardOutput = true, 
      RedirectStandardInput = true, 
     }) 

このコマンドには管理者権限が必要です。 WPFホストを管理者権限で起動するマニフェストファイルを追加しました。

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"><requestedExecutionLevel level="requireAdministrator" uiAccess="false" /></requestedPrivileges> 

これまでのところ、このソリューションはうまくいきます。 WPFアプリケーションを起動し、ボタンを押してイベントをトリガーすると、このコマンドプロンプトでプロセスが実行されます。

今、私はWPFクライアントにドラッグ&をドラッグしていくつかのファイルを追加したいと思います。私のアプリケーションは管理者権限で実行されているので、Windowsファイルエクスプローラからドロップファイル&をアプリケーションにドラッグすることはできません。

Total Commanderのドロップファイルを&にドラッグすることができます。トータルコマンダーは管理者権限で起動できるためです。私のWPFホストにOpenFileDialogを追加すると、&のドラッグをドラッグするほうがはるかに快適になります。

admin権限なしでアプリケーションを実行すると、&のドロップが機能しますが、権限がないためにアプリケーションがコマンドプロンプトを実行できません。

私のファイルを追加するためにドラッグ&ドロップを実装し、その後、これらのファイルをパラメータとして必要とする管理者権限を持つコマンドプロンプトを実行するにはどうすればよいですか?

+0

昇格したプロセスを開始するアプリケーションに管理者権限が必要な理由を決定するのはなぜですか? – Sinatr

+0

C:\ Windows \ System32 \ wevtutil.exeを実行して、一連のETWマニフェストをインストールします。 wevtutil.exeには管理権限が必要です。 –

+1

あなたの問題はコードでは解決できないと思います。これはWindowsセキュリティの動作です。しかし、私はまだこの質問に不思議です。 http://superuser.com/questions/59051/drag-and-drop-file-into-application-under-run-as-administrator – Smartis

答えて

1

まず、管理者権限を必要とする操作を1つだけ実行する必要がある場合、管理者権限でアプリケーション全体を実行する必要はありません。あなたは、この特定の操作のためだけにevelateする必要があります。これを行う最も簡単な方法は、プロセスを開始するときにUseShellExecute = trueを設定することです。その後、Windowsは通常のUACプロンプトをユーザに表示して、彼に啓示を確認させます。その前にユーザーに状況を説明することができます(ダイアログによっては)、または通常のUACアイコンをそのアクションを実行するボタン(シールドアイコン)に入れることができます。

これはオプションではない(たとえばリダイレクトされた出力が必要な場合) - 管理者権限を持つ特定の引数を持つ独自のアプリケーションの別のコピーを実行することができます(wevtutilではなく、 )。この啓発されたコピーはwevtutilを実行して終了し、何もしません。

関連する問題