DELPHI/TComport с UAC/uiAccess только не в состоянии читать / записывать на устройство с TComPort2010

У меня есть настольное приложение Delphi, которое использует TComport2010 для связи через USB/COM. Это приложение, считывает координаты X,Y с USB-устройства и тыкает на рабочий стол Windows, имитируя мышь. Все работает нормально, кроме случаев, когда пытаются переместить окно OSK(на экранной клавиатуре), эта проблема исправлена ​​в приложении, работающем с правами администратора или uiAccess = true в манифесте см. обсуждение здесь: проблема доступа к OSK. Следуя решению, предложенному в посте выше, я могу указывать события мыши в OSK. Но TComport2010 не может записать в comport при запуске приложения со следующим манифестом, который имеет только запрос uiAccess = trueи не права суперпользователя.

<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>
</requestedPrivileges>

Приложение скомпилировано с предложенным манифестом, подписано и запущено в директории программного файла, но в этой ситуации компортирование не выполняется, запись невозможна... если я запускаю приложение с контекстным меню, запускаемым от имени администратора, то все работает нормально, OSK высовывает и ком-порт для чтения / записи. Приложению нужны какие-то права для доступа к COM-устройствам? Или может быть связано с доступом к реестру TComport? Полный манифест здесь:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="pendrv.exe"
    version="2.0.0.2552"
    processorArchitecture="*" />
  <description>Fixed Up App</description>   
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"    
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
      <application> 
        <!--This Id value indicates the application supports Windows 7 functionality-->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--This Id value indicates the application supports Windows 8 functionality-->
          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        <!--This Id value indicates the application supports Windows 8.1 functionality-->
          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      </application> 
  </compatibility>  
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>

      <applicationRequestMinimum>
        <PermissionSet ID="FullTrust" Unrestricted="true" />
        <defaultAssemblyRequest permissionSetReference="FullTrust" />
      </applicationRequestMinimum>

      <requestedPrivileges>
        <!-- this access OSK but tcomport fails -->
        <requestedExecutionLevel level="asInvoker" uiAccess="true"/>

        <!-- in this case all works fine, but popup superuser request, that I want to avoid -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="true"/> 
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Проблема в том, что TcomPort не работает с манифестом, использующим только uiAccess = true, как это:

<requestedExecutionLevel level="asInvoker" uiAccess="true"/>

Я запустил приложение с подписью и в папке программных файлов.

Неудачный код delhpi - это вызов writestr в comport, который завершается неудачно при запуске приложения с asinvoker и uiaccess=true, при запуске с правами администратора он работает, если я помещаю приложение без манифеста и каких-либо прав в одну и ту же папку. ком работа тоже работает. Соответствующий код Delphi выглядит следующим образом:

Компонент com не возвращает никакого сообщения, отправленного устройством, я уверен, что устройство отправляет сообщение каждые 30 секунд, но событие onrxchar никогда не возникает, вызывается функция записи, но не уверен, действительно ли сообщение MSG отправлено на устройство. В общем, кажется, что Windows блокирует связь между устройством и компонентом delphi при работе с asinvoker и uiaccess=true. Если я запускаю с правами администратора, тот же код работает отлично.

Я поместил код tcomport на pastebin, потому что здесь есть ограничения по размеру, ссылка на код:

исходный код TComPort

После того, как я поместил несколько сообщений журнала в мемо-поле, я прослеживаю нормальный цикл событий TComport, когда получаю некоторые данные от внешнего USB-устройства.

Это цикл нормальной операции чтения / получения данных: (работает как администратор)

TCOMLOG:-----CreateHandle OK-----
TCOMLOG:_WriteStrWrapper:<read_ch>=9
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:DoTxEmpty
TCOMLOG:Thread.execute
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:CallRxChar
TCOMLOG:DoRxChar call
TCOMLOG:ReadStr called
TCOMLOG:ReadAsync called
TCOMLOG:ReadAsync passed
TCOMLOG:ReadStr finished
TCOMLOG:Thread.execute
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:CallRxChar
TCOMLOG:DoRxChar call
TCOMLOG:ReadStr called
TCOMLOG:ReadAsync called
TCOMLOG:ReadAsync passed
TCOMLOG:ReadStr finished
TCOMLOG:Thread.execute
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:CallRxChar
TCOMLOG:DoRxChar call
TCOMLOG:ReadStr called
TCOMLOG:ReadAsync called
TCOMLOG:ReadAsync passed
TCOMLOG:ReadStr finished
TCOMLOG:Thread.execute
...

Вот цикл, когда я запускаю приложение только с уровнем uiAccess=true и asInvoker в одной и той же папке программных файлов Windows:

TCOMLOG:-----CreateHandle OK-----
TCOMLOG:_WriteStrWrapper:<read_ch>=9
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:DoTxEmpty
TCOMLOG:Thread.execute
TCOMLOG:Thread.DispathComMsg
TCOMLOG:Thread.DoEvents
TCOMLOG:CallRxChar
TCOMLOG:DoRxChar call
TCOMLOG:ReadStr called
TCOMLOG:ReadAsync called
TCOMLOG:ReadAsync passed
TCOMLOG:ReadStr 

Журнал останавливается на ReadStr, кажется, что thread.execute зависает или что-то, может быть, по неизвестной причине приложение не получает USB-события от Windows..

0 ответов

Другие вопросы по тегам