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
Kommentare zum Snippet