Установка пользовательских разрешений с использованием VBScript на английском и не английском языках

Было много сообщений, где кто-то должен был знать, как изменить права доступа к папке или файлу при установке с использованием VBScript. Единственная проблема, которая у меня есть, заключается в том, что ни один из них не решил ее для неанглийских ситуаций.

Это в основном то, что я имею до сих пор. Я проверяю, является ли локаль определенным языком, например, "fr" для французского, а затем предполагаю, что для группы "Пользователи" существует группа под названием "Utilisateurs". Затем я вызываю 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)

Это работает, когда я запускаю его и когда он установлен в настраиваемом действии с помощью мастера установки Visual Studio. Я нашел некоторые псевдо-решения, которые работают, только если вы выполняете их вне пользовательских действий. Он должен работать в Custom Action для моей установки.

1 ответ

Решение

Локальная группа пользователей имеет хорошо известный SID, поэтому вы можете разрешить имя группы следующим образом:

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

Как примечание: я настоятельно рекомендую использовать icacls над cacls если вообще возможно.

Другие вопросы по тегам