Kompliziert: Adminrechte beim Start der Anwendung ...

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Kompliziert: Adminrechte beim Start der Anwendung ...

    Hoi Gemeinde.

    Bin den ganzen Tag dabei, eine Anwendung schon beim Start als Admin auszuführen.
    Hm .....

    Ich habe ...

    VB.NET-Quellcode

    1. Function Manifest() As String
    2. If File.Exists(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest") = True Then
    3. Return Nothing
    4. Exit Function
    5. Else
    6. Dim ManifestContent As String = String.Empty
    7. Dim nl As String = vbCrLf
    8. ManifestContent = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & nl
    9. ManifestContent &= "<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>" & nl
    10. ManifestContent &= "<!-- Identify the application security requirements. -->" & nl
    11. ManifestContent &= "<trustInfo xmlns=" & """" & "urn:schemas-microsoft-com:asm.v2" & """" & ">" & nl
    12. ManifestContent &= "<security>" & nl
    13. ManifestContent &= "<requestedPrivileges>" & nl
    14. ManifestContent &= " <requestedExecutionLevel" & nl
    15. ManifestContent &= " level=" & """" & "requireAdministrator" & """" & " uiAccess=" & """" & "false" & """" & "/>" & nl
    16. ManifestContent &= "</requestedPrivileges>" & nl
    17. ManifestContent &= "</security>" & nl
    18. ManifestContent &= "</trustInfo>" & nl
    19. ManifestContent &= "</assembly>" & nl
    20. 'Manifestdatei erstellen
    21. Dim sw As StreamWriter = File.CreateText(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest")
    22. sw.Write(ManifestContent)
    23. sw.Close()
    24. MessageBox.Show(createdText, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    25. GC.Collect()
    26. Application.Restart()
    27. End
    28. Return Nothing
    29. End If
    30. End Function


    VB.NET-Quellcode

    1. Private createdText As String = "Es wurde eine Manifestdatei erstellt, damit die Anwendung ordnungsgemäß als 'Admin' ausgeführt werden kann." & vbCrLf & vbCrLf & "Nachdem Du diese Meldung mit 'ok' bestätigst, wird sie neu gestartet."


    Im Load:

    VB.NET-Quellcode

    1. Manifest()


    Datei wird angelegt, aber beim Restart kein Admin.
    Man muss der Datei manuell den Befehl dazu geben, dass diese als Admin ausführen ist .... (Als Admin ausführen o.s.ä.)

    Hm ....

    Ich könnte zwar eine Abfrage reinsetzen, die dem User eine MsgBox ausspuckt, dass er keine Adminrechte hat.
    Ist aber kompliziert für einen Anwender. Möchte diese gleich mit einbinden (als Admin starten).

    Idee ?( ?( ?(
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Hi.

    Wieso so kompliziert? Gehe in die Projekteigenschaften auf "Einstellungen für die Benutzerkontensteuerung anzeigen". Diese Funktion generiert ein Manifest, in dem du requestedExecutionLevel auf "requireAdministrator" setzen kannst. Das Manifest wird dabei gleich in die Anwendung eingebettet.
    Gruß
    hal2000
    Das habe ich auch schon gemacht.

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    3. <assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
    4. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    5. <security>
    6. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    7. <!-- UAC-Manifestoptionen
    8. Wenn Sie die Zugangsebene für das Windows-Benutzerkonto ändern möchten, ersetzen Sie den
    9. requestedExecutionLevel-Knoten durch eines der folgenden Elemente.
    10. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    11. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    12. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
    13. Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
    14. Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts-
    15. kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
    16. -->
    17. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    18. </requestedPrivileges>
    19. <applicationRequestMinimum>
    20. <defaultAssemblyRequest permissionSetReference="Custom" />
    21. <PermissionSet ID="Custom" SameSite="none" Unrestricted="true" />
    22. </applicationRequestMinimum>
    23. </security>
    24. </trustInfo>
    25. <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    26. <application>
    27. <!-- Eine Liste aller Windows-Versionen, mit denen die Anwendung kompatibel ist. Windows wählt automatisch die am stärksten kompatible Umgebung aus.-->
    28. <!-- Wenn die Anwendung mit Windows 7 kompatibel ist, heben Sie die Kommentierung des folgenden supportedOS-Knotens auf.-->
    29. <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
    30. </application>
    31. </compatibility>
    32. <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
    33. <!-- <dependency>
    34. <dependentAssembly>
    35. <assemblyIdentity
    36. type="win32"
    37. name="Microsoft.Windows.Common-Controls"
    38. version="6.0.0.0"
    39. processorArchitecture="*"
    40. publicKeyToken="6595b64144ccf1df"
    41. language="*"
    42. />
    43. </dependentAssembly>
    44. </dependency>-->
    45. </asmv1:assembly>


    Dann kommt der Fehler: Die Anforderungsausführungsebene "requireAdministrator" wird von ClickOnce nicht unterstützt.

    Unter Sicherheit wird immer dieses ClickOnce aktiviert, wenn ich auf "Jetzt Veröffentlichen" gehe .... (keine Exe wird erstellt)
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JackCimberly“ ()

    Ist das Veröffentlichen wirklich wichtig für dich? Wenn nicht, dann reicht es aus, die ausführbare Datei aus dem Release-Ordner weiterzugeben. Dort ist das Manifest, wie gesagt, eingebettet. Ansonsten habe ich hier etwas gefunden, was dir helfen könnte: geektieguy.com/2007/08/25/gett…d-clickonce-applications/
    Gruß
    hal2000
    Hi.

    Ich habe zwei Programme, bestehend aus dem Hauptprogramm und dem Updater.
    Hauptprogramm wird/muss immer zuerst gestartet werden.

    Hauptprogramm benötigt schon beim Start Administratorenrechte. Der Updater nicht.
    Möchte eigentlich dem Anwender die Arbeit ersparen, dass dieser Rechtsklick auf die Anwendung macht "Als Admin ausführen ...".

    ClickOnce kann ich zwar deaktivieren, aber sobald ich das Projekt veröffentlichen möchte, dann wird in diesem Moment ClickOnce aktiviert und es kann keine exe-Datei erstellt werden.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Also entweder reden wir aneinander vorbei oder ich habe mich falsch ausgedrückt.
    Wenn du unter "My Project" --> Reiter "Sicherheit" --> den Haken bei "ClickOnce-Sicherheitseinstellungen aktivieren" entfernst, sollte es auch mit dem veröffentlichen funktionieren. Also bei mir setzt sich der Haken nicht automatisch.

    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%
    Hey,

    das gleiche Problem hatte ich auch schonmal.. Bei mir hat er den Hacken auch immer automatisch gesetzt, ich hatte den Fehler auch mal bei MSDN gepostet: Programm trotz Administrationsrechten veröffnetlichen allerdings hatte da auch keiner ne Lösung dafür.. Defakto hab ich es am ende mit InnoSetup gemacht:D

    lg.

    LucaWelker
    lg.

    LucaWelker
    @Pry

    Bei mir setzt der komischweise den Haken automatisch rein. Warum auch immer ...


    @LucaWelker

    Ah gut, dann sind wir schon mal zwei. :S
    Also InnoSetup nutze ich eigentlich nur, damit die Anwendungs in Programm Files installiert wird (oder da, wo der Anwender es möchte).
    Daher kann ich jetzt nicht verstehen, wie du das mit InnoSetup geregelt hast.
    Vielleicht hast Du paar Tipps für mich ... ;)
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Geregelt .... ja, komischer Begriff, ich weiss :)

    Ich nutze InnoSetup, damit man die erstellte exe-Datei in ein Verzeichnis installiert (C:\Program Files (x86)\).
    Mir ist da völlig unklar, wie man mit InnoSetup das so einrichtet, dass die installierte exe-Datei mit Adminrechten gestartet werden kann ... (dass meinte ich mit geregelt).
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Du stellst wie hier beschrieben alles ein, und verpackst dann mit InnoSetup das ganze als setup... Wenn es jetzt installiert ist und du die Anwendung Startest startet diese als Admin..

    Allerdings muss ich dazu sagen.. dass es allgemein nicht sehr schön ist ein Programm immer als Admin zu starten.. Nicht jeder will dass das Programm so viele Rechte hat.. geschweige denn was machen leute die garkeine Adminrechte haben?!

    Wofür brauchst du denn die Adminrechte?

    lg.

    LucaWelker
    lg.

    LucaWelker
    Das ist ja mein Problem.
    Habe das wie in dem Link (also gleicher Thread) umgesetzt. Da kommt ja der besagte Fehler.

    Das Hauptptogramm benötigt Adminrechte, da eine ini-Datei angelegt wird, die, wenn der Anwender es möchte, für den LiveUpdate benötigt wird.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren