Работал с почтовыми задачами, и одна из задач - задание каталогов для временных файлов почты.
Так вот если 1ёС запущена на из под админа, тогда там траблы с созданием каталогов.
Ну т.е. с последующим их использованием.
Можно ли как-то узнать, что 1С запущена под админом?
А в каталоге пользователя доступ вроде полный должен быть - создавать там?
А что такое "под админом"?
Узнать имя учетной записи пользователя из 1С? Вот пример:
Попытка
scrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
scrptCtrl.language="vbscript";
scrptCtrl.addcode("
|
|Function GetUser()
|Set WSHShell = CreateObject(""WScript.Shell"")
|Set WshSysEnv = WshShell.Environment(""Process"")
|GetUser = WshSysEnv(""Username"")
|End Function
|");
ИмяПользователяТерминала = scrptCtrl.run("GetUser");
Исключение
ИмяПользователяТерминала = "не получилось";
КонецПопытки;
Или узнать права на запись в конкретную папку? Тогда возможно проще там что-то попробовать создать, а затем считать - если получилось, значит права есть.
А КаталогВременныхФайлов() не получится не использовать? Или как Злоп советует.
"попробовать создать, а затем считать - если получилось, значит права есть."
- вполне рабочий вариант, я так делал
Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.
Цитата: Злоп от 04 июня 2025, 18:39Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.
странно. но если так
ТТ=СоздатьОбъект("Текст");
ТТ.ДобавитьСтроку("Тест");
Попытка
ТТ.Записать(путь куда надо);
исключение
Сообщить ("Прав нет!");
КонецПопытки;
ТТ=СоздатьОбъект("Текст");
Попытка
ТТ.Открыть(путь куда надо);
Сообщить ("Права есть");
Исключение
Сообщить ("Прав точно нет");
КонецПопытки;
Я просто видел код на си++ там просто у процесса запрашивается какой-то токен и анализируется.
задачка не совсем для formex, но...
как вариант запарсить текстовую выдачу команды "net user NAME"
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set file = fso.CreateTextFile("C:\test_admin.txt", True)
If Err.Number = 0 Then
WScript.Echo "Права администратора есть"
file.Close
fso.DeleteFile("C:\test_admin.txt")
Else
WScript.Echo "Права администратора отсутствуют"
End If
On Error GoTo 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colGroups = objWMIService.ExecQuery("Select * from Win32_GroupUser Where GroupComponent=""Win32_Group.Domain='" & strComputer & "',Name='Administrators'""")
isAdmin = False
Set objNetwork = CreateObject("WScript.Network")
currentUser = objNetwork.UserDomain & "\" & objNetwork.UserName
For Each objGroup In colGroups
' Получаем имя пользователя из связанного объекта PartComponent
Set colItems = objWMIService.ExecQuery("Select * from Win32_UserAccount Where __RELPATH='" & Replace(objGroup.PartComponent, """", "'") & "'")
For Each objItem In colItems
fullName = objItem.Domain & "\" & objItem.Name
If LCase(fullName) = LCase(currentUser) Then
isAdmin = True
Exit For
End If
Next
If isAdmin Then Exit For
Next
If isAdmin Then
WScript.Echo "Пользователь входит в группу администраторы"
Else
WScript.Echo "Пользователь не является администратором"
End If
Есть еще в проекте wsusoffline маленькая (37kB) утилитка isAdmin — она просто даёт код возврата 1 если пользователь не админ, могу выложить.
Но самый простой и надёжный первый вариант.