"net share" не работает на французской ОС Windows
Я пишу сценарий NSIS на ОС Windows для создания общих каталогов во время установки. Вот мой код, который хорошо работает на английской Windows, но не работает на французской Windows 7.
CreateDirectory C:\tmpShare
nsExec::Exec 'icacls C:\tmpShare /grant *S-1-1-0:(OI)(CI)F'
nsExec::Exec 'net share "tmpShare"="C:\tmpShare" /grant:Everyone,full /remark:"Temp shared folder"'
Причина: французская ОС не понимает строку имени пользователя "Все" в команде net share, она переводится как "Tout le monde" на французском языке.
Я попытался использовать идентификатор безопасности для "Все", т.е. *S-1-1-0 вместо строки "Все", но он не работает с сетевым ресурсом (ПЛОХОЙ ДИЗАЙН WINDOWS, хотя icacls работает с ним)
Я попытался использовать "Tout de monde" вместо "Все", и это решило проблему, теперь вопрос в том, Как написать свой сценарий NSIS, который не зависит от платформы?
1 ответ
Решение
Плагин AccessControl может преобразовать SID для вас:
AccessControl::SidToName "(S-1-1-0)"
Pop $2
Pop $1
MessageBox MB_OK "Name=$1 Domain=$2"