2013-10-08 2 views
1

У меня есть приложение VB6, который манипулирует файлы в папке ProgramData Win7. Он отлично работает с файлами, которые он создает, но с любыми файлами, которые были изначально установлены, его нельзя удалить. Я чувствую, что может быть больше проблем, если программа не может работать как администратор.Получение VB6 приложения для работы с администратором priviliges из манифеста

Я попытался положить раздел TrustInfo в манифесте, но появляется сообщение .... "Запрошенная операция требует возвышений.

манифеста включает в себя ...

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 

Любая идея, как придать ему необходимую «высоту», пожалуйста? После дополнительных исследований кажется правильным, что ProgramData - это папка, используемая в Win7, но для всех установленных файлов требуется разрешение администратора на удаление (независимо от того, запущен ли файл setup.exe как администратор).

Из интереса я сравнил свойство безопасности файла, который был установлен с файлом, что приложение созданным впоследствии. Установленный файл имел SYSTEM и Administrators с полными разрешениями и Пользователями только с Read и Execute. Созданный файл имел дополнительный объект, мою учетную запись, с полными разрешениями. Это звучит логично, поэтому я добавил свою учетную запись с полными правами на один из установленных файлов, ожидая, что приложение сможет его удалить. Затем, как и ожидалось, я могу удалить файл вручную в проводнике, без разрешения. Но приложение по-прежнему не может удалить его! Итак, я изменил права пользователей на установленный файл на полные разрешения, приложение по-прежнему не может его удалить! Итак, я перешел на «Владелец файла» в «Дополнительно», сначала «Пользователи», затем на мою учетную запись. Тем не менее приложение не может удалить его. Теперь нет никакой разницы между настройками безопасности установленного файла и созданным приложением файлом, оба имеют одинаковые разрешения и того же владельца.

Так если сравнить параметры безопасности все еще существуют некоторые различия между двумя файлами. Установленный файл имеет 2 дополнительных «не наследуемых» элемента в разрешениях для моей учетной записи и Пользователей. Даже если я удалю запись «Пользователи» в разделе «Дополнительно» (которая по-прежнему доступна только для чтения), приложение по-прежнему не может удалить.

Я слева интересно, если это проблема VB6 и я должен просто оставить приложение в его старой установке папки, в которой он может делать то, что он любит со своими файлами !!

+0

Другим подходом было бы сделать приложение «собственным» всеми файлами, которые установлены с ним, в его папку ProgramData. Кажется, что он отлично работает с файлами, которые он сам создает. –

+0

Вы не должны изменять файлы под файлами программы. Можете ли вы изменить программу, чтобы вместо этого сохранить файлы в «одобренном месте»? См. [Этот вопрос] (http://stackoverflow.com/questions/4273424/where-should-i-store-application-specific-settings) – MarkJ

+0

Не знаете, что вы подразумеваете под «под файлами программы». Приложение хранит файлы программ в «Program Files» и все файлы данных в ProgramData. –

ответ

1

После выполнения некоторых исследований на ваш вопрос я нашел много людей с помощью манифеста так же, как это. Попробуйте установить уровень на «asInvoker». :

<?xml version="1.0" encoding="utf-8" ?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" 
     processorArchitecture="X86" 
     name="MyProjectName" 
     type="win32" /> 
    <description>MyProjectDescription</description> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="asInvoker" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Замените "MyProjectName" на название проекта.

+0

Спасибо, я попробовал, и появляется сообщение о том, что механизм Microsoft Jet не может открыть файл базы данных доступа. ID: 3051 SourceDAO.Workspace. Его другая проблема разрешения, но это не отображается, если раздел TrustInfo опущен! –

0

Эта отличная статья ... by Kenny Kerr имеет ответ, который должен использовать level = "highAvailable" в манифесте.

Смежные вопросы