Причины появления диалогового окна Помощник по совместимости программ? - PullRequest
21 голосов
/ 24 февраля 2011

Каковы возможные причины появления диалогового окна Помощник по совместимости программ после закрытия моего приложения?

Образ Помощника по совместимости программ http://i.msdn.microsoft.com/dynimg/IC5958.gif

РЕДАКТИРОВАТЬ: Помощник по совместимости программ: часто задаваемые вопросы

Я понимаю, что этот вопрос уже задавался на SO

Однако мое приложение:

  1. получает только PCA после закрытия
  2. Не пытается делать ничего, что требует повышенных привилегий (я не думаю)
  3. Не получает PCA при запуске из IDE
  4. Не является установщиком /программа установки
  5. В имени программы нет "installer" или "setup"
  6. Не выдает исключение при закрытии или выходе с кодом, отличным от 0 (я недумаю)
  7. Не получит PCA , если я добавлю <compatibility> узел в манифест приложения

Note # 6, со следующим app.manifest, я нетдольше получите PCA:

<?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">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
  </compatibility>
</asmv1:assembly>

Так что вторая часть, кажется, исправляет это, но я беспокоюсь, что мое приложение все еще делает что-тоg, что я не знаю.

Чтобы было ясно, я задаю вопрос из 2 частей:

  1. Какие проблемы могут вызвать PCAпоявится диалоговое окно?
  2. Является ли узел <compatibility> абсолютно необходимым для того, чтобы избежать диалога PCA?Или я все еще делаю что-то не так?

1 Ответ

9 голосов
/ 16 марта 2011

В этой статье MSDN описывается множество условий, которые могут вызвать срабатывание помощника по совместимости программ. Я бы рассмотрел набор описанных сценариев и выяснил, применим ли какой-либо из них к вашей программе.Я вижу причины для диалогов PCA вне условий, которые вы исключили (например, при попытке создать новую папку в %ProgramFiles%).

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