Помощник по совместимости программ считает, что мое приложение является установщиком

Я создал приложение .NET C # WinForms на Win 7 RTM x64, которое, скажем, я назвал DataInstaller.

Когда я запускаю эту программу вне отладчика (это просто пустая форма, в данный момент не работающая), она работает нормально, пока я не закрою форму. Затем я получаю сообщение от помощника по совместимости программ, в котором говорится:

Эта программа могла быть установлена ​​неправильно

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

Если я назову приложение «DataThingy», это не проблема, я думаю, это связано с тем, как программы с именем * Setup получают значок щита UAC.

Я предполагаю, что будет что-то простое, что я могу добавить в манифест приложения, чтобы предотвратить это?

Я не уверен, что это происходит в Vista, поскольку в настоящее время у меня нет доступа.

Изменить имя нельзя, и отключить UAC нельзя, поэтому, пожалуйста, не предлагайте этого!

Редактировать:

МОЙ БОГ.

Похоже, что если что-либо из следующего верно, UAC вставляет свое весло:

Имя exe содержит слово установщик

AssemblyInfo.cs

AssemblyTitle contains the word 'Installer'
    e.g. [assembly: AssemblyTitle("DataInstaller")]
AssemblyProduct contains the word 'Installer'
    e.g. [assembly: AssemblyProduct("Data Installation Utility")]

«Установщик» также может быть «Установщиком».

Не верится, это действительно так. Очевидно, один из старых программистов VB6 был переведен в команду UAC в Редмонде.

Мне все еще нужен обходной путь, я не готов признать, что мое приложение не может быть вызвано установщиком, потому что оно не затрагивает реестр и не помещает какие-либо файлы в папку Program Files.

Я предполагаю, что UAC поместит машину в полную блокировку, если я попытаюсь запустить свое приложение под названием IAmAVirus.exe. (На самом деле, я не осмеливаюсь попробовать, потому что не совсем уверен, что я просто глупый)


person Carl    schedule 16.10.2009    source источник
comment
На самом деле Windows просто проверяет имя файла на такие слова, как установка или установка, чтобы определить, является ли что-то установщиком или нет. Да тупо ... Можно что-нибудь с этим поделать? Интересно ... Хороший вопрос.   -  person Wim ten Brink    schedule 16.10.2009
comment
Я надеюсь на это, потому что это все слишком "волшебно волокнистое", на мой взгляд ... спасибо за голосование!   -  person Carl    schedule 16.10.2009
comment
@Wim - Нет, похоже, это AssemblyTitle, как предлагается в сообщении. Проверено на моей машине Win7 SP1 для PackageInstaller.exe - нет проблем, если заголовок сборки - PackageNstaller   -  person Josh Sutterfield    schedule 26.07.2013


Ответы (3)


Добавьте это в свой манифест.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<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}"/>
    <!--The ID below indicates app support for Windows 8 -->
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    <!--The ID below indicates app support for Windows 8.1 -->
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
  </application>
</compatibility>

The GUIDs for all the operating systems in the previous example provide down-level support. Apps that support multiple platforms do not need separate manifests for each platform.

Взято из манифеста приложения (исполняемого).

person Justin    schedule 29.01.2010
comment
Прекрасно работает даже при развертывании в ProgramFiles! Спасибо, Джастин. - person Carl; 29.01.2010
comment
Это не имело никакого значения, когда я его пробовал ... мой инструмент называется ccsetup, поскольку он заменяет исходный инструмент настроек с этим именем, но пока в имени или информации о версии есть слово setup, мусор совместимости продолжает появляться. Когда я его удаляю, проблема сразу исчезает, но я не хочу, чтобы у него было другое имя. - person Nyerguds; 01.06.2011
comment
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} для Windows 8. Подробнее: msdn.microsoft.com/en-us/library/windows/desktop/ - person mjb; 22.11.2013
comment
{1f676c76-80e1-4239-95bb-83d0f6d0da78} для Windows 8.1 - person Michael Geier; 30.01.2015
comment
См. это сообщение в блоге. - person Chuck Walbourn; 07.02.2015

Как Мастерская Алекс будет делать предположения, основываясь на именах файлов.

Но вы пробовали добавить файл манифеста? Это позволяет вам указать, какие права доступа необходимы для запуска приложения.

MSDN о том, как создать его в Visual Studio Еще одна ссылка на статью, которая помогает.

person EKS    schedule 16.10.2009
comment
Просто добавление манифеста помогло (хотя я пробовал это перед публикацией, честно!). Для получения дополнительной информации см .: blogs.msdn.com/cjacks/archive/2009 / 06/18 / и technet. microsoft.com/en-us/library/dd638326%28WS.10%29.aspx. Спасибо. - person Carl; 16.10.2009
comment
В качестве обновления нет, не сработало. Как только исполняемый файл развертывается в другом месте, таком как «Program Files», PCA снова поднимает свою уродливую голову. - person Carl; 03.11.2009
comment
Старый вопрос, но имя файла было тем, что делало это для меня. Изменил установщик на инструмент, и он работал нормально. Спасибо за подсказку @EKS - person DTown; 28.09.2010

У меня только что возникла эта проблема, и я решил ее исправить, убедившись, что заголовок моей сборки в файле AssemblyInfo.cs и имя сборки моего файла cs.proj совпадают. Когда они не были синхронизированы, это вызывало эту ошибку, делая их одинаковыми, заставляло ее исчезнуть. Не уверен, применимо ли это к вашей ситуации, но та же ошибка, аналогичные обстоятельства, возможно, стоит попробовать и избежать принятого ответа, состоящего в игнорировании ошибки в целом.

person Kevin DiTraglia    schedule 05.06.2012
comment
Это именно та проблема, с которой я столкнулся. Спасибо, что обратил внимание на это, хотя на вопрос был дан ответ. Я думал, что это настройки манифеста, но я изменил Assembly name в свойствах проекта, и он не соответствует Default namespace. - person strider; 18.03.2014