Wir laufen Dynamics GP. Wegen der Art, wie Formulare/Berichte gespeichert werden, brauche ich einige Installationsskripte, die eine .SET-Datei in das Programmverzeichnis kopieren. Dies kann manuell erfolgen, aber es ist viel schneller, wenn ein Benutzer ein Installer-Skript ausführt, das die richtigen Dateien für sie installiert.Genehmigung Erhöhung von VBScript
Ich habe ein VBScript-Installationsprogramm erstellt, das die notwendigen Dateien kopiert. Der schwierige Teil ist, dass einige Clients Windows XP ausführen und einige Windows 7 (oder sogar 8) ausführen. Die Benutzerkontensteuerung ist aktiviert, sodass Berechtigungen ins Spiel kommen.
Die Art, wie ich es versucht habe, ist blind versucht, die Dateien zu kopieren, und wenn ein Berechtigungsfehler erkannt wird, startet es das Skript mit Administratorberechtigungen neu. Wo wir auf Probleme stoßen, sind einige (alle?) Windows 7 Maschinen virtualisierte Datei-/Registrierungsschreibvorgänge aktiviert, wenn das Skript also versucht, Dateien nach C: \ Programme \ Microsoft Dynamics \ GP2010 zu kopieren, schlägt es im Hintergrund fehl und kopiert sie in das AppData \ Local \ VirtualStore-Verzeichnis des Benutzers. Dies funktioniert nicht ordnungsgemäß mit GP.
Also, was ich tun muss, ist das Skript die Dateien in C: \ Programme (nicht das Verzeichnis VirtualStore) kopieren, und Berechtigungen nur bei Bedarf erhöhen. Wenn ich es auf der ganzen Platine anheben lasse, verursachen die Windows XP-Maschinen beim Starten des Skripts einfach ein kryptisches Dialogfeld "Ausführen als".
Hier ist, was ich bisher:
Dim WSHShell, FSO, Desktop, DesktopPath
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = CreateObject("WScript.Shell")
Desktop = WSHShell.SpecialFolders("Desktop")
DesktopPath = FSO.GetAbsolutePathName(Desktop)
'Set working directory to directory the script is in.
'This ends up being C:\Windows\System32 if the script is
'started from ShellExecute, or a link in an email, thus breaking
'relative paths.
WSHShell.CurrentDirectory = FSO.GetFile(WScript.ScriptFullName).ParentFolder
On Error Resume Next
If FSO.FolderExists("C:\Program Files (x86)") Then
WScript.Echo "Installing 64-bit."
FSO.CopyFile "64-bit\*.set", "C:\Program Files (x86)\Microsoft Dynamics\GP2010\", True
FSO.CopyFile "64-bit\*.lnk", DesktopPath, True
ElseIf FSO.FolderExists("C:\Program Files\Microsoft Dynamics\GP2010\Mekorma MICR") Then
WScript.Echo "Installing 32-bit (with MICR)."
FSO.CopyFile "32-bit MICR\*.set", "C:\Program Files\Microsoft Dynamics\GP2010\", True
FSO.CopyFile "32-bit MICR\*.lnk", DesktopPath, True
Else
WScript.Echo "Installing 32-bit."
FSO.CopyFile "32-bit\*.SET", "C:\Program Files\Microsoft Dynamics\GP2010\", True
FSO.CopyFile "32-bit\*.lnk", DesktopPath, True
End If
If Err.Number = 70 Then
CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """" , "", "runas", 1
WScript.Quit
ElseIf Err.Number <> 0 Then
MsgBox "Error " & Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description
Else
MsgBox "Installed successfully."
End If
Zusammengefasst: Wie habe ich ein VBScript Berechtigungen ohne verursacht XP erhöht Dialogfeld mit einem „Als Run“ zum Stillstand kommen, und ohne verursacht Windows 7, um die Dateien stattdessen in AppData \ Local \ VirtualStore zu kopieren?
Sieht aus wie Du selbst beantworten, aber ich werde prüfen, ob der aktuelle angemeldete Benutzer Admin-Rechte hat, statt Win Version und erheben nur dann, wenn braucht. –