Feedback

VB - For Vista: create manifest at runtime

Veröffentlicht von am 19.02.2007
(8 Bewertungen)
programmiert man Anwendungen die administrative rechte benötigen, so hat man unter Windows Vista mit einigen Schwierigkeiten zu kämpfen.

Das Problem lässt sich mit einer Manifestdatei lösen - darin muss lediglich stehen, dass die Anwendung Admin Rechte braucht.

Beim Start der Anwendung fragt Vista dann nach, ob die Rechte eingeräumt werden sollen.

Der nachfolgende Code erstellt automatisch eine Manifestdatei für die aufrufende Anwendung.

Der Code muss beim laden des Hauptformulares oder ausgeführt werden.

Wurde der Code einmal ausgeführt, ist die Manifest-Datei welche die erhöhten Rechte abfordert, ersellt.

Während Sie an Ihrer Softwarelösung arbeiten, sollten Sie das erstellen der Manifest_Datei auskommentieren - Sie erhalten sonst - spätestens beim 2. Compilieren - die meldung, dass die Anwendung erhöhte Rechte braucht und nicht compiliert werden kann.

Imports System.IO
Imports Microsoft.VisualBasic


Module modManifest


    ''' <summary>
    ''' 
    ''' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
    ''' 
    ''' STEITZ® IT-Solutions
    ''' 
    ''' Diese Funktion erstellt eine Manifestdatei welche unter Windows Vista™ ­
    ''' erhöhte Rechte beim Betriebssystem abfordert. Es wird - beim Anwendungs-
    ''' start gefragt, ob die Anwendung ausfgeführt werden darf.
    ''' 
    ''' Ist die Manifestdatei beim ersten Programmstart nicht vorhanden, wird 
    ''' sie sofort erstellt. Gleiches gilt auch, wenn Sie gelöscht wurde.
    ''' 
    ''' Beim 2. Start der Anwendung werden dann die entsprechenden Rechte
    ''' abgefragt.
    ''' 
    ''' 
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>


    Function Manifest() As String
        If File.Exists(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest") = True Then
            Return Nothing
            Exit Function
        Else

            Dim ManifestContent As String = String.Empty
            Dim nl As String = vbCrLf
            ManifestContent = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & nl
            ManifestContent &= "<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>" & nl
            ManifestContent &= "<!-- Identify the application security requirements. -->" & nl
            ManifestContent &= "<trustInfo xmlns=" & """" & "urn:schemas-microsoft-com:asm.v2" & """" & ">" & nl
            ManifestContent &= "<security>" & nl
            ManifestContent &= "<requestedPrivileges>" & nl
            ManifestContent &= " <requestedExecutionLevel" & nl
            ManifestContent &= " level=" & """" & "requireAdministrator" & """" & " uiAccess=" & """" & "false" & """" & "/>" & nl
            ManifestContent &= "</requestedPrivileges>" & nl
            ManifestContent &= "</security>" & nl
            ManifestContent &= "</trustInfo>" & nl
            ManifestContent &= "</assembly>" & nl
            'Manifestdatei erstellen
            Dim sw As StreamWriter = File.CreateText(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest")
            sw.Write(ManifestContent)
            sw.Close()

           

            MessageBox.Show(createdText, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            GC.Collect()
            End

            Return Nothing
        End If
    End Function

    Private createdText As String = _
                        "Es wurde eine neue Manifestdatei erstellt. Damit die Anwendung ordnungsgemaess arbeitet" & _
                        "muss sie neu gestartet werden." & vbCrLf & vbCrLf & _
                        "Nachdem Sie diese Meldung mit ""ok"" bestaetigt habe, wird sie beendet werden." & vbCrLf & _
                        "Bitte starten Sie sie anschließend durch einen Doppelclick auf das Anwendungssymbol"





End Module

Abgelegt unter Vista, requireAdmin, Vista.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!