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

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

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

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


person CaptainBli    schedule 22.03.2013    source источник


Ответы (1)


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

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

В качестве примечания: я настоятельно рекомендую использовать _ 2_ более cacls, если это вообще возможно.

person Ansgar Wiechers    schedule 22.03.2013
comment
Какая разница между двумя? - person CaptainBli; 25.03.2013
comment
Между cacls и icacls? Последний правильно обрабатывает наследование. Недостатком является то, что он недоступен до Windows Server 2003 SP2. - person Ansgar Wiechers; 25.03.2013
comment
Спасибо Вам за информацию. Я ожидал, что icacls будет работать только в более поздних версиях. В настоящее время я также устанавливаю на XP. Но, возможно, я мог бы проверить, что я использую более новую ОС, чтобы вызвать icacls. - person CaptainBli; 26.03.2013