Я решил эту проблему в конце концов. Вот что случилось.
1) Я попробовал предложение Бена использовать инструменты sysinternals. Инструменты, которые казались полезными были
DependencyWalker ProcessExplorer ProcessMonitor
Каждый из них дают много информации о том, что происходит, и я могу видеть, что они должны быть первым портом захода для многих, если не большинство, проблемы с Windows. Тем не менее, в моем случае я дважды щелкнул приложение и получил диалоговое окно UID для пользователя/пароля, но затем обнаружил, что инструменты были написаны не так много информации, до тех пор, пока диалог не появился.
Было также полезно переварить содержимое книг Microsoft Internals Windows Internals при попытке устранить проблемы с UAC.
2) Я пробовал использовать набор средств обеспечения совместимости приложений, но он не обнаружил проблем с программой либо на XP (где она работала), либо на Windows 7 (как со стандартным пользователем, так и с интерфейсом UAC и пользователем администратора, который работал)
3) Затем я попытался тщательно воссоздать приложение с нуля, начиная с пустого проекта, а затем постепенно копируя файлы и настройки. На каждом этапе я проверил, будет ли приложение запускаться без всплытия диалога UAC.
В конце концов я применил изменение, и это вызвало появление диалога UAC. Это было приложение VB6, и я изменил «название приложения» и «название продукта» в диалоговом окне «Проект», «Свойства», «Создать». Предыдущим (неудачным) значением каждого поля было «Обновление ApplicationName». Чтобы приложение работало без повышения UAC, мне нужно было удалить слово «Обновить».
Как было предложено выше Ian, похоже, что применялись эвристики UAC и значения в пределах exe. Я вижу, что в книге Windows Internals говорится о сканировании байтовых последовательностей в exe при принятии решения о том, следует ли поднимать.
4) Итак, подход, который сработал для меня, состоял в том, чтобы собрать приложение пополам и посмотреть, на каком этапе запускается диалоговое окно UAC. Как только это произойдет, знание четырех причин, которые дал Ян в предыдущем ответе, становится важным.
5) Я должен указать, что я исправил проблему, удалив вещь, помеченную в эвристике, но не рассмотрел альтернативу, предложенную Яном: «asInvoker». Возможно, это лучшее, что можно попробовать, а не тратить время на проблемы (исправления) приложений.
Вы являетесь разработчиком этого приложения? Если нет, вы не в том месте. SuperUser отвечает на вопросы, связанные с управлением компьютером, которые не связаны с программированием. –
Спасибо, Бен. Да, я смотрю на это с точки зрения разработчика. Я незнакома с приложением, но если я знаю, что происходит не так, я могу сразу получить доступ к коду и, возможно, домой в решении. Это ты имел в виду? – westwell
Итак, вы собираетесь перестроить приложение из источника? Да, это важно, а не там, где вы получили код, но что вы делаете изменения кода, а не, например, просто находите оскорбительную запись реестра и меняете ее разрешения. –