3

У меня есть старое приложение, которое создает и обновляет 2 файла непосредственно в « C:\Documents And Settings\All Users ». Это программное обеспечение работало как шарм в Windows 2000 и Windows XP. Однако, поскольку мы перешли на Windows 7, у нас возникли проблемы с обновлением этих двух файлов.

После быстрого расследования я обнаружил, что права доступа к файлам были слишком ограничены для нашего приложения для правильной работы. Поэтому я попытался изменить права доступа к файлу, чтобы предоставить полный контроль пользователю « Все». Это работало нормально при первом обновлении файлов, но после первой записи Windows 7 восстановила права доступа к файлам для некоторых значений по умолчанию. Я также попытался завладеть папкой « C:\ProgramData » и снова предоставить полный доступ всем пользователям, но снова, после первой операции записи, права доступа к файлу восстанавливаются до настроек по умолчанию.

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

Я не могу изменить расположение этих двух файлов. Как я могу предоставить полный контроль над конкретным файлом, расположенным в папке « C:\ProgramData », при этом операционная система не может восстановить некоторые разрешения по умолчанию?

2 ответа2

3

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

Что может сделать shim, так это то, что этот исполняемый файл может перенаправлять все операции чтения и записи из C:\ProgramData во что-то вроде C:\ProgramData\ProgramName и вы должны иметь возможность устанавливать разрешения для папки ProgramName и сохранять эти разрешения.

ACT - сложная система с крутой кривой обучения. Подробное объяснение того, как его настроить и затем создать прокладку, было бы слишком большим для формата этого сайта. Я рекомендую прочитать MSDN и попробовать сделать это самостоятельно, и если у вас возникнут проблемы с возвращением сюда с конкретными проблемами, с которыми вы столкнулись.

Я также рекомендовал бы проверить на сайте ServerFault вопросы о ACT, поскольку вы выходите за пределы мира "опытных пользователей" и в мир "IT Professional", и вы можете найти там лучшие ресурсы.

1

Мне удалось найти обходной путь, который лучше подходит для моей ситуации, поскольку я не могу изменить исходный код и не имею возможности потратить много времени на изучение набора средств для обеспечения совместимости приложений (как предложил Скотт Чемберлен).

Использование символических ссылок в моем случае позволило значительно сэкономить время и деньги. Из командной строки запустите следующую последовательность:

move C:\ProgramData\SomeFile.bin C:\Test
mklink C:\ProgramData\SomeFile.bin C:\Test\SomeFile.bin 

При условии, что каждый требуемый пользователь имеет требуемый доступ к новому расположению файла (в данном случае C:\Test ), все прозрачно для приложения.

Как я уже говорил, это только обходной путь. Ответ Скотта - правильный способ сделать это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .