2012-03-19 5 views
-1

次のコードを使用してUACウィンドウを表示しています。それは正常に動作しますが、このウィンドウを上げるボタンを含むフォームは2回表示されます。つまり、このボタンをクリックすると、UACウィンドウが表示され、ファイルがコピーされ、成功メッセージが表示され、copyfileボタンを含む同じフォームの別のインスタンスが開きます。助けてください。UACウィンドウを上げるとフォームが2回読み込まれる

Dim proc As New ProcessStartInfo 
    proc.UseShellExecute = True 
    proc.WorkingDirectory = Environment.CurrentDirectory 
    proc.FileName = Application.ExecutablePath 
    proc.Verb = "runas" 
    Try 
     Process.Start(proc) 
    Catch 
     ' The user refused to allow privileges elevation. 
     MsgBox("Permission denied by user ! Can not proceed.", MsgBoxStyle.Critical) 
     vrIfDenied = 1 
     Return 
    End Try 

答えて

0

私が間違っている場合は私を訂正してくださいが、あなたのprocファイル名のプロパティが自分と同じであることがわかります。あなたは、同じアプリケーションを実行すると、現在のアプリケーションの2つのインスタンス

+0

あなたはproc.Verb = "runas"を意味する私はちょうどマイクロソフトのサイトからこのコードを選んだ。どうしたらいいのか教えてください。 –

+0

私はproc.FileName = Application.ExecutablePathを意味しません。これは、実行するファイル名が現在実行中のアプリケーションと同じであるため、アプリケーションの2つのインスタンスになります。私はあなたが "UnRaisedフォーム"を閉じる必要があると思います – jasperagrante

+0

ありがとうございます。私はこれを試してみましょう。私はあなたに戻ってくる。 –

0

はあなたのコードにこれを追加せている:

<DllImport("shell32.dll", EntryPoint:="IsUserAnAdmin")> _ 
Public Shared Function IsUserAnAdmin() As Boolean 
End Function 

今ときにアプリが読み込まれると、それはのように上昇priviledgesを実行している、と灰色されたかどうかを確認しますそうでない場合は、このようなコピーファイルボタンアウト:

If IsUserAnAdmin() = False Then 
    btnCopyFile.enabled=false 
ElseIf IsUserAnAdmin() = True Then 
    btnCopyFile.enable=true 
    btnElevateMe.enabled=false 
End If 

今あなたがもともとpriviledgesを高め、UACプロンプトを起動するには投稿のコードを使用する第二ボタン(btnElevateMe)を追加することができます。 WITH特権を実行すると、グレー表示になります。

Application.Exit() 

そして、それが上昇priviledgesで2番目のインスタンスを起動した後、アプリを閉じます。これを「試してみてください終了」の後

また、あなたのコードに追加します。

関連する問題