使用VBScript英语和非英语设置用户权限

使用VBScript英语和非英语设置用户权限,vbscript,localization,locale,custom-action,cacls,Vbscript,Localization,Locale,Custom Action,Cacls,在许多帖子中,有人需要知道如何在安装时使用VBScript更改文件夹或文件的权限。我遇到的一个问题是,在非英语的情况下,他们都没有解决这个问题 这就是我到目前为止的基本情况。我检查区域设置是否是一种特定的语言,如法语的“fr”,然后假设有一个名为用户组的组。然后我调用cacls来设置对我的文件夹的更改权限。这对英语和法语都很有效,但我不确定其他语言的组是什么。我目前仅限于这六种语言,因为我不知道其他用户组是以其他语言命名的 我希望能够处理所有情况,但如果您有其他语言的已知用户组列表,就足以解决我

在许多帖子中,有人需要知道如何在安装时使用VBScript更改文件夹或文件的权限。我遇到的一个问题是,在非英语的情况下,他们都没有解决这个问题

这就是我到目前为止的基本情况。我检查区域设置是否是一种特定的语言,如法语的“fr”,然后假设有一个名为用户组的组。然后我调用cacls来设置对我的文件夹的更改权限。这对英语和法语都很有效,但我不确定其他语言的组是什么。我目前仅限于这六种语言,因为我不知道其他用户组是以其他语言命名的

我希望能够处理所有情况,但如果您有其他语言的已知用户组列表,就足以解决我当前的问题

Dim nLocale
nLocale = objShell.RegRead("HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName")
Dim nLocaleName, sUserGroup
nLocaleName = Left(nLocale, 2)
'MsgBox "[" & nLocaleName & "] = en" & InStr(1, nLocalName, "en", vbTextCompare)
if InStr(1, nLocaleName, "en", vbTextCompare) = 1 or nLocaleName="en" then
    sUserGroup="Users"
elseif InStr(1, nLocaleName, "fr", vbTextCompare) = 1 then
    sUserGroup="Utilisateurs"
elseif InStr(1, nLocaleName, "de", vbTextCompare) = 1 then
    sUserGroup="Benutzer"
elseif InStr(1, nLocaleName, "es", vbTextCompare) = 1 then
    sUserGroup="Usuarios"
elseif InStr(1, nLocaleName, "it", vbTextCompare) = 1 then
    sUserGroup="Utenti"
elseif InStr(1, nLocaleName, "pt", vbTextCompare) = 1 then
    sUserGroup="Usuários"
else
    MsgBox "To allow other users access to the AUDit Database you will need to give user permissions to " & strHomeFolder, (vbOKOnly + vbExclamation), "Notice of Permissions"
    return
end if

'Wscript.Echo "cacls """ & strHomeFolder & """ /e /c /g " & sUserGroup & ":C "

intRunError = objShell.Run("cacls """ & strHomeFolder & """ /e /c /G """ & sUserGroup & """:C ", 2, True)

当我运行它时,以及在使用VisualStudio的安装向导的自定义操作中设置它时,这都会起作用。我发现了一些只有在自定义操作之外执行的伪解决方案。对于我的安装,它必须在自定义操作中工作。

本地用户组有一个,因此您可以这样解析组的名称:

Set wmi = GetObject("winmgmts://./root/cimv2")
sUserGroup = wmi.Get("Win32_SID.SID='S-1-5-32-545'").AccountName


作为旁注:如果可能的话,我强烈建议使用超过
cacls

两者之间的区别是什么?在
cacls
icacls
之间?后者正确地处理继承。缺点是它在Windows Server 2003 SP2之前不可用。谢谢您提供的信息。我原以为icacls只适用于更高版本。我目前也在XP上安装。但也许我可以做一个检查,以确保我在一个更新的操作系统上,以便调用icacls。