Chúng tôi chạy Dynamics GP. Vì cách lưu trữ biểu mẫu/báo cáo, tôi cần phải có một số tập lệnh cài đặt sao chép tệp .SET vào thư mục chương trình. Điều này có thể được thực hiện thủ công, nhưng nó nhanh hơn nhiều khi chỉ có một người dùng chạy một kịch bản cài đặt mà cài đặt các tập tin thích hợp cho họ.Mức tăng quyền từ VBScript
Tôi đã xây dựng trình cài đặt VBScript sao chép các tệp cần thiết xung quanh. Phần khó khăn là một số khách hàng đang chạy Windows XP, và một số đang chạy Windows 7 (hoặc thậm chí 8). UAC được kích hoạt, vì vậy quyền truy cập vào chơi. Cách tôi đã cố gắng làm điều đó là bằng cách cố gắng sao chép các tập tin một cách mù quáng, và nếu phát hiện lỗi quyền hạn, nó sẽ khởi chạy lại tập lệnh với quyền quản trị viên. Trong trường hợp chúng tôi gặp phải vấn đề thì một số máy tính Windows 7 đã kích hoạt tập tin/đăng ký ảo được kích hoạt, vì vậy khi tập lệnh cố sao chép các tệp vào C: \ Program Files \ Microsoft Dynamics \ GP2010, nó sẽ không thành công và sao chép chúng vào thư mục AppData \ Local \ VirtualStore của người dùng. Điều này không hoạt động đúng với GP.
Vì vậy, những gì tôi cần làm là có kịch bản sao chép các tệp vào C: \ Program Files (không phải thư mục VirtualStore) và chỉ nâng cấp quyền nếu cần. Nếu tôi có nó nâng lên trên bảng, điều này làm cho các máy Windows XP chỉ đơn giản là bật lên một hộp thoại "Run As" khó hiểu khi khởi chạy kịch bản.
Dưới đây là những gì tôi có cho đến nay:
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
Tóm lại: Làm thế nào để có một VBScript nâng cao quyền mà không gây XP để chết máy ở một "Run As" hộp thoại, và mà không gây Windows 7 để sao chép các tập tin vào AppData \ Local \ VirtualStore thay thế?
Hình như bạn trả lời cho mình, nhưng tôi sẽ kiểm tra xem người dùng đăng nhập hiện tại có quyền admin, thay vì phiên bản Win, và nâng cao nếu chỉ nhu cầu. –