Имя: Пароль:
1C
 
Ошибка доступа к файлу 'C:\Program Files\1cv8\conf\logcfg.xml'
,
0 TormozIT
 
гуру
14.08.16
17:07
В 64-битной ОС Windows 10 с выключенным контролем учетных записей (UAC) из 32-битного клиентского приложения, запущенного интерактивно без элевации (не через команду "Запуск от имени администратора"), выполняю попытку записать файл "C:\Program Files\1cv8\conf\logcfg.xml" и получаю исключение

Ошибка доступа к файлу 'C:\Program Files\1cv8\conf\logcfg.xml'

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

Если даю доступ учетным записям "Все приложения" или "Все ограниченные приложения", то ошибка остается. Если даю доступ всем (учетная запись "Все") на этот файл, то ошибка уходит.

Можно ли как то временно запросить у пользователя элевацию на конкретную файловую операцию?

Как из кода 1С запустить приложение с элевацией?
1 Jija Grenkov
 
14.08.16
20:33
Первое, что приходит в голову выполнить bat/shell скрипт. А пользователь пароль админа знает или нет?
2 Cyberhawk
 
14.08.16
20:37
"с выключенным контролем учетных записей (UAC)" // Его нельзя выключить. Наверное, имеется в виду самое "нижнее" положение ползунка в настройке уровней УАС?
3 Jump
 
14.08.16
20:53
(0) >>Как грамотно (с учетом идеологии контроля учетных записей) записать такой файл?

Грамотно -
не отключать UAC
не писать в системные директории.
4 Jija Grenkov
 
14.08.16
21:02
(3) так а если файл настроек системного журнала должен лежать именно в этом каталоге? По вашей теории нельзя автоматизировать этот процесс.
5 Jump
 
14.08.16
21:04
(4) Файл настроек системного журнала? А какое отношение 1с может иметь к системному журналу?
6 Jija Grenkov
 
14.08.16
21:13
(5) технологического журнала имелось в виду
7 Jump
 
14.08.16
21:18
(6) Технологический журнал, это журнал приложения.
А приложение не должно хранить свои журналы, логи и прочие временные файлы в системных директориях.
Т.е журналов там не должно быть.

В (0) речь идет про файл logcfg.xml - это файл настройки приложения.
Он записывается при установке программы.
И соответственно должен изменяться, перезаписываться, или удалятья только при установке или удалении данной программы.
8 Jump
 
14.08.16
21:18
Т.е есть базовый принцип - приложение не должно писать в Program Files, и уж тем более не должно там ничего хранить.
9 Jija Grenkov
 
14.08.16
21:26
(7) Я не разделяю ваше мнение, что файл настроек технологического журнала должен записыватсья при установке/удалении 1с. Это не временный файл, это не лог - это конфигурационный файл приложения (1с) для настройки логирования. Где ему еще лежать? Как минимум я знаю 2 случая, когда этот файл меняетя из 1с. В ЦУП и обработке настройки тех журнала.
10 Jump
 
14.08.16
21:30
(9) Поясню -
Если файл изменяется при работе программы, то его нельзя размещать в Program Files.

Там можно размещать только файлы изменяемые при установке программы!
11 Jija Grenkov
 
14.08.16
21:53
(10) я даже затрудняюсь представить где должны лежать конфиги приложения (конфиги для того и есть, что бы их менять по потребности).
1. Конфиг это скорее постоянный файл чем временный. Часто без конфига приложение просто не будет запускатсья, а удаление временных файлов не должно влиять на работоспособность приложения.

2. Разработчики 1с решили, что конфиги должны лежать в папке c установленной платформой.

3. Довольно много программ хранят конфиги в <home directory>/conf , я сейчас много работаю с apache hadoop стеком и там все конфиги лежат именно в этом каталоге.
12 Jump
 
14.08.16
21:57
(11) Все конфиги должны лежать в HomeDir.
Это основа.
В линуксе немного по другому, но принцип тот же.
13 Jija Grenkov
 
14.08.16
21:59
(12) Так, а что для платформы является home dir? Разве не папка куда установленая программа?
14 Jija Grenkov
 
14.08.16
22:02
И самый ключевой момент в том, что разработчки платформы ожидают файл именно в том месте и пользователю остаеться только подстраиваться под ситуацию.
15 TormozIT
 
гуру
14.08.16
22:16
(1) Пользователь знает пароль, но не хочет его вводить.
(2) Да.
16 Jija Grenkov
 
14.08.16
22:21
17 Jump
 
14.08.16
22:24
(13) HomeDir - домашняя директория пользователя, от имени которого запущена программа.
18 Jump
 
14.08.16
22:26
(14) Да пофиг что там ожидают разработчики.
Вопрос был в том, как идеологически правильно обеспечить доступ к файлу, я объяснил.
А как там думают разработчики - дело третье.
19 Лефмихалыч
 
14.08.16
22:26
(0) прав не хватает пользователю, под которым сервер запущен, поди
20 TormozIT
 
гуру
14.08.16
22:28
(19) Где написано про сервер?
21 Jija Grenkov
 
14.08.16
22:31
(18) До меня вам точно не удалось донести суть. В папке пользователя лежат настройки относящиеся к конерктному пользователю, в папке с утановленной программой конфиги относящиеся к программе в целом.
22 Jump
 
14.08.16
22:31
(19) Что нехватает прав это понятно.
Не хватает прав пользователю, под которым записана программа.
Почему не хватает - потому что пользователям нельзя писать в эту директорию.
23 Лефмихалыч
 
14.08.16
22:32
(20) считай, что у меня телепатический припадок.
24 Jump
 
14.08.16
22:34
(21) По идеологии Windows в Programm Files хранится сама программа и необходнимые для нее библиотеки и данные.
Они записываются в момент инсталляции, и используются только на чтение.

В нее запрещено писать пользовательским программам.
25 Jump
 
14.08.16
22:35
Т,е хранить в Programm Files можно что угодно, а менять нельзя.
26 TormozIT
 
гуру
14.08.16
22:37
(16) Спасибо. Хоть что то по существу вопроса =)
Видимо придется использовать старый добрый hstart, который теперь поддерживает элевацию.
27 Jija Grenkov
 
14.08.16
22:37
(24) можно ссылку с описанием данной идеалогии? подойдет и на английском.
28 Лефмихалыч
 
14.08.16
22:38
можно тупо прав накинуть на этот самый сам по себе logcfg.xml

еще можно "mklink -j" и заныкать куда-то этот logcfg.xml, куда права есть.

или в 1cv8\8...*\bin\conf\conf.cfg прописать ConfLocation, опять же туда, где есть права
29 TormozIT
 
гуру
14.08.16
22:39
Еще бы найти полностью бесплатную утилиту для выполнения команд системы с элевацией.
30 Jump
 
14.08.16
22:40
(27) Того что запись в эту папку запрещена вам недостаточно?
31 Лефмихалыч
 
14.08.16
22:42
(29) wmic process create
google that
32 Jija Grenkov
 
14.08.16
22:48
(30) Конечно нет. Это лишь подтвержает, что конфигурацие должен заниматься человек с правами админа. Не вижу никих проблем записать файл из скрипта.
33 TormozIT
 
гуру
14.08.16
22:50
(31) Где тут про элевацию?
34 Jija Grenkov
 
14.08.16
22:52
(33) чем не устроил вариант из (16)?
35 Jump
 
14.08.16
22:54
(32) Вот именно - вносить изменения туда может только админ, и система.
Но никак не пользователь.
А программа запускается от пользователя.
36 TormozIT
 
гуру
14.08.16
22:55
(34) Научи запускать из 1С скрипт PowerShell и ловить выходной поток (сообщения).
37 Jija Grenkov
 
14.08.16
23:01
(36) я подразумевал, что весь код записи файла будет в скрипте. То есть вы его динамически сформировали, положили во временный каталоги и оттуда скриптом копировали в конечную директорию
38 Jija Grenkov
 
14.08.16
23:01
http://blog.essentialkaos.com/post/1525117103/privileges-in-windows-console в коментах так же приводили пример через bat
39 TormozIT
 
гуру
14.08.16
23:03
(38) Опять через runas. Он всегда просит вводить пароль.
40 TormozIT
 
гуру
14.08.16
23:04
Решение найдено.
elevate - Command-Line UAC Elevation Utility
This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.
http://code.kliu.org/misc/elevate/
41 TormozIT
 
гуру
15.08.16
00:34
(40) Утилита действительно работает и не запрашивает пароль, но показывает окно командного интерпретатора. Поэтому все таки пришлось вернуться к старому доброму hstart.
Ошибка? Это не ошибка, это системная функция.