1С запущена из под админа?

Автор trdm, 04 июня 2025, 11:52

« назад - далее »

trdm

Работал с почтовыми задачами, и одна из задач - задание каталогов для временных файлов почты.
Так вот если 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"); Исключение     ИмяПользователяТерминала = "не получилось"; КонецПопытки;

Или узнать права на запись в конкретную папку? Тогда возможно проще там что-то попробовать создать, а затем считать - если получилось, значит права есть.

А КаталогВременныхФайлов() не получится не использовать? Или как Злоп советует.

Злоп

"попробовать создать, а затем считать - если получилось, значит права есть."
- вполне рабочий вариант, я так делал

Злоп

Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.

p18

Цитата: Злоп от 04 июня 2025, 18:39Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.
странно. но если так
ТТ=СоздатьОбъект("Текст"); ТТ.ДобавитьСтроку("Тест"); Попытка  ТТ.Записать(путь куда надо); исключение  Сообщить ("Прав нет!"); КонецПопытки; ТТ=СоздатьОбъект("Текст"); Попытка  ТТ.Открыть(путь куда надо);  Сообщить ("Права есть"); Исключение  Сообщить ("Прав точно нет"); КонецПопытки;

trdm

Я просто видел код на си++ там просто у процесса запрашивается какой-то токен и анализируется.
задачка не совсем для formex, но...

ЯнСмит

как вариант запарсить текстовую выдачу команды "net user NAME"

Arbuz

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 если пользователь не админ, могу выложить.
Но самый простой и надёжный первый вариант.