用Ghost 出來的OS,其Office 使用者為預設值,如果多人開啟同一份File Server的文件時,最常預到的是出現"唯讀"現象,想要要求使用者關閉,確不知是何人最先開啟。
解決辦法是:要求Office使用者設定"使用者"資訊。
Office 2003 : 工具 => 選項 => 一般 => 使用者名稱
Office 2010 : 檔案 => 選項 => 一般 => 使用者名稱
如果有人不合作,不變更設定,豈不是就沒輒了 ??
還是可以用Logon Script 強制更正:
前略
.........
' for Office : start
hDefKey = &H80000001 '
' Connect to registry provider on target machine with current user'
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
' 將User Name 轉換為 16 進制編碼
iValues = AsciiToHex(objUser.cn)
BinaryValueName = "UserName"
arrHexValues = Split(iValues, ",") ' 分離字串為陣列
aOfficeVersions = Array("14.0","12.0","11.0") ' 設定更新的Office 版本
' find the Office version(s) installed
For Each sOfficeVersion In aOfficeVersions
sRegKeyPath = "Software\Microsoft\Office\" & sOfficeVersion & "\Common\UserInfo" ' Register key path
If oReg.EnumKey(hDefKey, sRegKeyPath , arrSubKeys) = 0 Then ' 判斷是否有子鍵值
oReg.SetBinaryValue hDefKey,sRegKeyPath ,BinaryValueName,arrHexValues ' 更新
End If
Next
sRegKeyPath = "Software\Microsoft\Office\Common\UserInfo" ' Office 2010 有 default User name 位置
If oReg.EnumKey(hDefKey, sRegKeyPath , arrSubKeys) = 0 Then
oReg.SetBinaryValue hDefKey,sRegKeyPath ,BinaryValueName,arrHexValues
End If
'
Function AsciiToHex(sData)
' Turns ASCII string sData into array of hex numerics
Dim i, aTmp
For i = 1 To Len(sData)
If i = 1 Then
aTmp = "&H" & Hex(Asc(Mid(sData, i))) & ",&H00"
Else
aTmp = aTmp & ",&H" & Hex(Asc(Mid(sData, i))) & ",&H00"
End If
Next
ASCIItoHex = aTmp & ",&H00,&H00"
End Function
' --- for office end
更強的寫法,四行搞定:
Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.cn
objWord.UserInitials = Left(objUser.cn, 1) & Left(objUser.SN, 1)
objWord.Quit
沒有留言:
張貼留言