Помощник по совместимости программ считает, что мое приложение является установщиком
Я создал приложение .NET С# WinForms на Win 7 RTM x64, которое позволяет сказать, что я вызвал DataInstaller.
Когда я запускаю эту программу за пределами отладчика (просто пустую форму без функции на данный момент), она работает нормально, пока я не закрою форму. Затем я получаю сообщение от помощника по совместимости программ, в котором говорится:
Возможно, эта программа не установлена правильно
Затем я получаю возможность переустановки с использованием рекомендуемых параметров или сказать, что установка действительно работала, как ожидалось.
Если я называю приложение DataThingy, это не проблема, я думаю, это связано с тем, как программы, называемые * Setup, получают значок щита UAC.
Я предполагаю, что будет что-то простое, что я могу помещать в манифест приложения, чтобы предотвратить это?
Я не уверен, что это происходит в Vista, поскольку у меня нет доступа в настоящее время.
Изменение имени не является опцией, и выключение UAC не является вариантом, поэтому, пожалуйста, не предлагайте это!
Edit:
OMG.
Кажется, что если любое из следующих утверждений верно, UAC вставляет свое весло в:
Имя Exe содержит слово Installer
AssemblyInfo.cs
AssemblyTitle contains the word 'Installer'
e.g. [assembly: AssemblyTitle("DataInstaller")]
AssemblyProduct contains the word 'Installer'
e.g. [assembly: AssemblyProduct("Data Installation Utility")]
"Установщик" также может быть "Setup".
Это порождает веру, это действительно так. Очевидно, один из старых программистов VB6 переместился в команду UAC в Редмонде.
Мне все еще нужно обходное решение, я не готов признать, что мое приложение не может быть вызвано установщиком, потому что оно не касается реестре или не помещает файлы в папку Program Files.
Я предполагаю, что UAC поставит машину в полную блокировку, если я попытаюсь выполнить мое приложение IAmAVirus.exe. (На самом деле, я не пытаюсь это сделать, потому что я не совсем уверен, что я просто глуп)
Ответы
Ответ 1
Добавьте это в свой манифест.
<?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>
GUID для всех операционных систем в предыдущем примере обеспечивают поддержку нижнего уровня. Приложениям, поддерживающим несколько платформ, не нужны отдельные манифесты для каждой платформы.
Взято из манифест приложения (исполняемый файл).
Ответ 2
Как и мастерская, Алекс сделает предположение, основанное на именах файлов.
Но вы пытались добавить файл манифеста? Это позволяет вам использовать права доступа, необходимые для запуска приложения.
MSDN о том, как создать его из Visual Studio
Еще одна статья ссылки, в которой help.
Ответ 3
У меня была эта проблема, и я решил ее исправить, убедившись, что мой заголовок сборки в файле AssemblyInfo.cs и имя сборки моего файла cs.proj совпадают. Когда они не были синхронизированы, это забрасывало эту ошибку, заставляя их одинаково заставлять ее уходить. Не уверен, что это применимо к вашей ситуации, но такая же ошибка аналогичных обстоятельств, возможно, стоит попробовать и избежать принятого ответа об игнорировании ошибки все вместе.