Über Api Programm als administrator starten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    Über Api Programm als administrator starten

    Schönen Abend,

    ich öffne Programme und Dateien mit folgender Windows Api:

    VB.NET-Quellcode

    1. ​Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Integer, ByVal Operation As String, ByVal Filename As String, Optional ByVal Parameters As String = Nothing, Optional ByVal Directory As String = Nothing, Optional ByVal WindowStyle As Integer = vbNormal) As Integer
    2. Public Shared OpenFile As Integer
    3. OpenFile = ShellExecute(0, "Open", GetCommandLineArgs(1).ToString)


    Das funktioniert auch alles super nur wie kann ich damit ein Programm als administrator starten.

    Grüße TM
    Nutze die Process Klasse, die hat alles an Board dafür. Brauchste die API nicht nutzen, auch mit Dateien. Bei Dateien reicht ein Process.Start(FILENAME) um eine Datei mit dem zugewiesenen Programm zu öffnen.

    VB.NET-Quellcode

    1. Public Sub ProcessClassExample(filename As String)
    2. Dim p As New Process
    3. With p.StartInfo
    4. .FileName = filename
    5. .Verb = "runas" 'UAC popt auf wenn dieses Programm selbst nicht über Adminrechte verfügt
    6. End With
    7. p.Start()
    8. End Sub

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    @NoIde
    Funktioniert Prima nur das die Api einen Vorteil hat. Bei der Api wird wenn die Datei keinem Programm zugeordnet ist, das "Öffnen Mit" fenster angezeigt. Sonst hast du recht ist einfacher zu verwenden.

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

    Gut zu wissen, hatte eine solche Situation noch nicht. Eben mal probiert, mit der statischen Methode Process.Start passiert nix(bei nicht zugewiesenen Programm). Mit der nicht-statischen kommt dann zumindest eine Exception, worauf man reagieren kann. Aber da ist die API-Funktion doch ganz nützlich.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Ich habe das jetzt mal mit einer NET-Konformen deklaration der Funktion gemacht, es geht, UAC zeigt den Dialog.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. Const SW_SHOWNORMAL As Integer= 1
    4. <DllImport("Shell32", CharSet:=CharSet.Auto, SetLastError:=True)>
    5. Public Shared Function ShellExecute(hwnd As IntPtr, lpOperation As String, lpFile As String, pParameters As String, lpDirectory As String, nShowCmd As Integer) As IntPtr
    6. End Function
    7. Public Shared OpenFile As IntPtr
    8. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. OpenFile = ShellExecute(IntPtr.Zero, "runas", "E:\Network\HomeMedia.exe", Nothing, Nothing, SW_SHOWNORMAL)
    10. End Sub
    11. End Class

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „NoIde“ ()

    Toolmaster schrieb:

    Doch dürfte die Api auch etwas Launisch sein.


    Da kann man aber auch was machen. Du könntest in der Registry schauen ob ein Programm der FileExtension von der Datei zugeordnet ist. Wenn nicht einen OpenFileDialog nutzen und optional anbieten die FileExtension einem Programm zuzuweisen.

    Wobei braucht man nicht mal in der Registry schnüffeln, einfach die Process-Klasse einsetzen, den Process(Datei) nicht statisch in einem Try Catch versuchen zu starten, ist kein Programm zugewiesen, bekommt man eine Exception:
    System.ComponentModel.Win32Exception: 'Der angegebenen Datei ist keine Anwendung zugeordnet'

    Daraufhin einen OpenFileDialog, danach vllt. noch eine kleine MessageBox mit Ja/Nein ob zugewiesen werden soll.

    Kannst aber auch via API auslesen, ob eins zugewiesen ist.
    Pinvoke ist grad down, daher MS
    docs.microsoft.com/en-us/windo…-shellapi-findexecutablea

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Ich gehe mal davon aus, dass es sich hierbei ausschließlich um Windows 10 Rechner handelt bezüglich UWP.
    Dann könntest du natürlich den Weg über die Windows 10 API gehen:
    docs.microsoft.com/de-de/windo…ze/desktop-to-uwp-enhance

    Dadurch kannst du dann diesem UWP Guide Folgen, was das starten des Standardprogramms für gewisse Dateitypen angeht:
    docs.microsoft.com/de-de/windo…-file?redirectedfrom=MSDN

    Damit solltest du normale Desktop Anwendungen, als auch UWP Apps aufrufen können.