Форум Кладовочки АЛьФ`а

Обсуждение проектов => FormEx => Тема начата: trdm от 04 июня 2025, 11:52

Название: 1С запущена из под админа?
Отправлено: trdm от 04 июня 2025, 11:52
Работал с почтовыми задачами, и одна из задач - задание каталогов для временных файлов почты.
Так вот если 1ёС запущена на из под админа, тогда там траблы с созданием каталогов.
Ну т.е. с последующим их использованием.
Можно ли как-то узнать, что 1С запущена под админом?
Название: Re: 1С запущена из под админа?
Отправлено: Злоп от 04 июня 2025, 13:15
А в каталоге пользователя доступ вроде полный должен быть - создавать там?
Название: Re: 1С запущена из под админа?
Отправлено: Харлампий Дымба от 04 июня 2025, 16:25
А что такое "под админом"?
Узнать имя учетной записи пользователя из 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");
Исключение
    ИмяПользователяТерминала = "не получилось";
КонецПопытки;

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

А КаталогВременныхФайлов() не получится не использовать? Или как Злоп советует.
Название: Re: 1С запущена из под админа?
Отправлено: Злоп от 04 июня 2025, 18:15
"попробовать создать, а затем считать - если получилось, значит права есть."
- вполне рабочий вариант, я так делал
Название: Re: 1С запущена из под админа?
Отправлено: Злоп от 04 июня 2025, 18:39
Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.
Название: Re: 1С запущена из под админа?
Отправлено: p18 от 05 июня 2025, 16:03
Цитата: Злоп от 04 июня 2025, 18:39Если через ФС копировать файл или записывать в папку где нет прав - платформа ничего не скажет, все пройдет типа нормально, но итог будет бяковый.
странно. но если так
ТТ=СоздатьОбъект("Текст");
ТТ.ДобавитьСтроку("Тест");
Попытка
 ТТ.Записать(путь куда надо);
исключение
 Сообщить ("Прав нет!");
КонецПопытки;
ТТ=СоздатьОбъект("Текст");
Попытка
 ТТ.Открыть(путь куда надо);
 Сообщить ("Права есть");
Исключение
 Сообщить ("Прав точно нет");
КонецПопытки;
Название: Re: 1С запущена из под админа?
Отправлено: trdm от 07 июня 2025, 18:12
Я просто видел код на си++ там просто у процесса запрашивается какой-то токен и анализируется.
задачка не совсем для formex, но...
Название: Re: 1С запущена из под админа?
Отправлено: ЯнСмит от 08 июня 2025, 13:18
как вариант запарсить текстовую выдачу команды "net user NAME"
Название: Re: 1С запущена из под админа?
Отправлено: Arbuz от 09 июня 2025, 15:34
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 если пользователь не админ, могу выложить.
Но самый простой и надёжный первый вариант.