Требуется доступ к папке «Program Files» - PullRequest
2 голосов
/ 18 августа 2010

Я столкнулся с этой довольно часто упоминаемой проблемой, но даже после просмотра почти всех источников я не получил ответа. Проблема заключается в следующем:

Я написал небольшой инструмент обновления, который подключается к серверу, чтобы проверить наличие новых версий приложения, а затем копирует новую версию на клиентскую машину. Итак, картина такова:

Клиент устанавливает программу обновления, предварительно настроенную мной для конкретного приложения. Так что в основном программа обновления находится где-то в папке Program Files. Затем запускается программа обновления, подключается к нашему серверу, получает самую новую версию и устанавливает ее в тот же каталог, в котором установлена ​​программа обновления. Таким образом, клиент не знает, что есть два приложения. средство обновления и основное приложение, для которого предназначено средство обновления. Я надеюсь, вы поняли идею.

Так вот почему мне нужен доступ к папке Program Files.

Я занимаюсь разработкой под Windows 7, и программное обеспечение должно работать и на 7.

Есть ли способ убедиться, что администратор запускает программу обновления? Нужны ли мне права администратора для доступа к нему? Что еще, так как он запрещает доступ, даже если у меня есть права администратора? Есть ли способ проверить в коде, какие права имеет пользователь?

Ответы [ 3 ]

4 голосов
/ 18 августа 2010

Я бы разделил средство проверки и средство обновления на два разных приложения. Проверка может выполняться как обычный пользователь. Когда он обнаруживает, что есть обновление, он запускает программу обновления. Для программы обновления у вас есть манифест, в котором говорится, что ему нужны права администратора . Это приведет к тому, что пользователю будет предложено предоставить доступ (учитывая, что UAC включен).

2 голосов
/ 18 августа 2010

Из-за модели безопасности на серверах Vista, 7 и 2008 вы должны создать манифест, чтобы указать, какой уровень доступа требуется вашему приложению, и автоматически запрашивать административные права (если они работают без UAC.)

0 голосов
/ 18 августа 2010

Используйте app.manifest в вашем приложении. Установите для параметра requireadministrator значение true. или скопируйте и вставьте ниже xml

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
<requestedExecutionLevel  level="requireAdministrator" uiAccess="true" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

выше относится к приложению vb.net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...