Eseguiamo Dynamics GP. A causa del modo in cui memorizza i moduli/i report, è necessario disporre di alcuni script di installazione che copiano un file .SET nella directory del programma. Questo può essere fatto manualmente, ma è molto più veloce avere semplicemente un utente che esegue uno script di installazione che installa i file appropriati per loro.Elevazione permesso da VBScript
Sto costruendo un programma di installazione VBScript che copia i file necessari in giro. La parte difficile è che alcuni client eseguono Windows XP e alcuni utilizzano Windows 7 (o addirittura 8). UAC è abilitato, quindi le autorizzazioni entrano in gioco.
Il modo in cui ho provato a farlo è tentare ciecamente di copiare i file, e se viene rilevato un errore di autorizzazione, rilancia lo script con i permessi di amministratore. Dove abbiamo incontrato problemi alcuni (tutti?) Le macchine di Windows 7 hanno scritture di file/registro virtualizzate abilitate, quindi quando lo script tenta di copiare i file in C: \ Programmi \ Microsoft Dynamics \ GP2010, fallisce silenziosamente e li copia alla directory AppData \ Local \ VirtualStore dell'utente. Questo non funziona correttamente con GP.
Quindi è necessario che lo script copi i file in C: \ Programmi (non nella directory di VirtualStore) ed elevi le autorizzazioni solo se necessario. Se lo eleva su tutta la linea, questo fa sì che le macchine Windows XP semplicemente aprano una finestra di dialogo "Esegui come" criptica all'avvio dello script.
Ecco quello che ho finora:
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
In sintesi: come fare Ho un VBScript elevare le autorizzazioni senza causare XP stallo in un "Esegui come" finestra di dialogo, e senza causare Windows 7 per copiare i file su AppData \ Local \ VirtualStore?
Sembra che si risponde da soli, ma io ti verificare se l'utente loggato corrente dispone dei diritti di amministratore, invece della versione Win, ed elevare se solo esigenze. –