forgottenrealm
Goto Top

ClickOnce Anwendung immer mit Admin Rechten ausführen

Hallo !

Ich hänge bei einem Problem mit einem Programm, welches als ClickOnce Anwendung erstellt wird fest.

Das Programm MUSS mit Administratorrechten ausgeführt werden, da ich Zugriff auf diverse Verzeichnisse (C:\Windows\Tasks z.B.) haben muss.


Gibt es eine Möglichkeit, dass die Anwendung immer mit Admin Rechten ausführen kann? Beim Update wird ja jedes Mal eine neue Exe in das Apps Verzeichnis des Benutzers "installiert", wodurch die alte zwar noch da ist, aber eben veraltet ist.

Ich kann mir vorstellen, dass ich nicht der einzige bin, der damit Probleme hat ... face-sad


Freundliche Grüße!

Content-ID: 218880

Url: https://administrator.de/contentid/218880

Ausgedruckt am: 11.12.2024 um 21:12 Uhr

colinardo
colinardo 09.10.2013 aktualisiert um 14:22:30 Uhr
Goto Top
Hallo ForgottenRealm,
für sowas gibt es normalerweise das Application Manifest deiner Applikation in dem du festlegen kannst welche minimalen Berechtigungen dein Programm haben muss das es startet.
Im Manifest musst du dann an der richtigen Stelle folgendes einfügen:
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
Das Problem ist aber das die ClickOnce-Publish-Methode die Policy("requireAdministrator") aus Sicherheitsgründen nicht zulässt. Hier wäre eine andere Art des Deployments angesagt. Eine Lösung für dein Problem wäre folgendes: http://www.codeproject.com/Tips/627850/ClickOnce-deployment-vs-requeste ...

Ein Workaround-Beispiel mit VB.Net:
Imports System
Imports System.Diagnostics
Imports System.Reflection
Imports System.Security.Principal
Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim wi = WindowsIdentity.GetCurrent()
        Dim wp = New WindowsPrincipal(wi)
        Dim runasAdmin As Boolean = wp.IsInRole(WindowsBuiltInRole.Administrator)
       
        'Wenn Anwendung nicht mit Admin-Rechten gestartet wurde ...  
        If Not runasAdmin Then               
            Dim processInfo = New ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase)
            'hier wird festgelegt das die Anwendung als Admin gestartet werden soll  
            processInfo.UseShellExecute = True
            processInfo.Verb = "runas"  
            Try
                'starte Anwendung als Admin (UAC-Dialog erscheint)  
                Process.Start(processInfo)                     
            Catch ex As Exception
                MsgBox("Der Benutzer hat nicht erlaubt das die Applikation Administratorrechte erhält")  
            End Try
            'schließe die alte Anwendung ohne Admin-Rechte  
            Application.Exit()                                     
        End If
    End Sub
End Class
Grüße Uwe
ForgottenRealm
ForgottenRealm 09.10.2013 aktualisiert um 14:28:47 Uhr
Goto Top
Hallo Uwe

Vielen Dank für die schnelle Antwort.

Soweit wie ich den Code verstanden habe (ich sehe was der Code macht), startet das Script das Programm als Administrator?

Wie bekomm ich das in VB.net zum Laufen? Das sieht mir nach etwas anderem aus, was ich so leider nicht ganz zuordnen kann, da ich mich bisher nur mit VB.net und VBA/VBS auseinander gesetzt habe.

Edit

Kannst du hellsehen, das du gerade in dem Moment in dem ich antworte, ein Beispiel in vb.net postest? face-smile
colinardo
colinardo 09.10.2013 aktualisiert um 14:48:15 Uhr
Goto Top
Zitat von @ForgottenRealm:
Kannst du hellsehen, das du gerade in dem Moment in dem ich antworte, ein Beispiel in vb.net postest?
dachte mir schon das du das in VB.net haben willst, wer mit ClickOnce hantiert programmiert meistens VB.net face-wink
Grüße Uwe
ForgottenRealm
ForgottenRealm 11.10.2013 um 13:42:31 Uhr
Goto Top
Hallo Uwe

Nochmal vielen Dank für die Antwort, hat alles wunderbar funktioniert face-smile

Ich denke mal, das werde ich in Zukunft öfter brauchen wenn Microsoft die Rechteverwaltung in zukünftigen Windows Versionen so belasst wie sie es in Windows 8 eingeführt haben.

Ich hätte jetzt allerdings noch eine frage zur Aktualisierung von ClickOnce Anwendungen. Sobald das Programm gestartet wird, soll ein Update durchgeführt werden, funktioniert prächtig. Was ich allerdings noch viel lieber hätte, wäre eine Möglichkeit, dass sich die Anwendungen automatisch aktualisieren ohne Nachfrage bzw. Eingreifen des Anwenders. Gibt es dafür auch eine Möglichkeit?

Grüße !
colinardo
colinardo 11.10.2013 aktualisiert um 13:56:16 Uhr
Goto Top
Zitat von @ForgottenRealm:
Ich hätte jetzt allerdings noch eine frage zur Aktualisierung von ClickOnce Anwendungen. Sobald das Programm gestartet wird,
soll ein Update durchgeführt werden, funktioniert prächtig. Was ich allerdings noch viel lieber hätte, wäre
eine Möglichkeit, dass sich die Anwendungen automatisch aktualisieren ohne Nachfrage bzw. Eingreifen des Anwenders. Gibt es
dafür auch eine Möglichkeit?
Hi,
klar ... kannst du in den Start deiner Anwendung implementieren:
http://msdn.microsoft.com/de-de/library/vstudio/ms404263.aspx?cs-save-l ...

Zusätzlich solltest du dann aber auch im ClickOnce Deployment das automatische Checken auf Updates deaktivieren. Mehr dazu steht hier:
http://msdn.microsoft.com/de-de/library/vstudio/1zyc39fb.aspx

Grüße Uwe
ForgottenRealm
ForgottenRealm 14.10.2013 um 09:02:09 Uhr
Goto Top
Hallo

Vielen Dank für die Antwort, ich werds mir mal anschauen face-smile

Grüße !