Как получить доступ / Что такое параметр WiX CommonAppDataFolder для службы Windows в учетной записи SYSTEM - PullRequest
1 голос
/ 16 мая 2019

У меня есть служба Windows, которая должна работать под учетной записью SYSTEM.Я использую CommonAppDataFolder в качестве места назначения для содержимого конфигурации конкретного приложения и исходного материала, такого как файлы журналов, файлы шаблонов Excel и т. Д. Служба устанавливается правильно и работает, однако, когда она пытается загрузить файл шаблона Excel, она сталкивается с проблемой,следующее содержание показывает, что служба может получить доступ и записать в файл журнала.Приложение использует NLog в качестве структуры ведения журнала:

Имя приложения: Версия файла приложения: 5.2.0.0 Выпущено: Пользователь: NT AUTHORITY \ SYSTEM | 12: 24: 59 | NT AUTHORITY \ SYSTEM | Информация | AppName -Запущенная служба AppName 2 | 12: 24: 59 | NT AUTHORITY \ SYSTEM | Trace | AppName - извлечение имен аварийных сигналов RTU из файла конфигурации 3 | 12: 24: 59 | NT AUTHORITY \ SYSTEM | Trace | AppName - извлечение условных имен аварийных сигналов из конфигурациифайл 4 | 12: 25: 23 | NT AUTHORITY \ SYSTEM | Debug | AppName - извлеченные запланированные запросы

Файл журнала находится по адресу:

D: \ programdata \ Companyname \ AppName \ Logs

Однако, когда служба пытается получить доступ к файлу шаблона Excel, она генерирует:

System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Excel не может получить доступ к файлу 'd: \ programdata \ CompanyName\ AppName \ Templates \ PsaDefault.xltm.Есть несколько возможных причин:

• Имя файла или путь не существует.

• Файл используется другой программой.

• Книга, которую вы пытаетесьимя для сохранения совпадает с именем текущей открытой книги.

Ни одна из них не является причиной.Моя непосредственная мысль после этого была: «Хорошо ... общие приложения для учетной записи SYSTEM находятся в другом месте, и это было сделано с помощью быстрого поиска Google по этой теме.Однако, если это так, как служба может записывать и получать доступ к файлу журнала, который находится в точно такой же структуре папок?

Можно ли как-то изменить свой проект WiX, чтобы либо предоставить необходимые инструкции для устранения возможных конфликтов учетной записи «Пользователь вошел в систему» ​​/ SYSTEM, либо, в качестве альтернативы, изменить структуру папок на место, где это делает учетная запись SYSTEMне сталкивался с этой проблемой.Существует ли эквивалентный параметр WiX для учетной записи SYSTEM?Или я полностью ошибаюсь в своих предположениях относительно этой проблемы?

Ниже приводится выдержка из моего файла product.wxs (GUID, информация о компании и приложении, перезаписанная заполнителями):

  <!-- The following section deals with the deployment of the application data files including logs, templates and userguide elements-->
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="CommonAppDataFolder" Name="CommonAppData" >
      <Directory Id="dirCompanyAppData" Name="CompanyName">
        <Directory Id="dirAppNameAppData" Name="AppName">
          <Component Id="cmpDirAppNameAppData" Guid="{###}" KeyPath="yes">
            <CreateFolder Directory="dirAppNameAppData" />
            <RemoveFile Id="PurgeAppnameAppData" Name="*.*" On="uninstall" />
            <RemoveFolder Id="idDirAppNameAppData" On="uninstall" Directory="dirAppNameAppData" />
          </Component>
          <Directory Id="dirAppNameAppDataOutput" Name="Output">
            <Component Id="cmpDirAppNameAppDataOutput" Guid="{###}">
              <CreateFolder Directory="dirAppNameAppDataOutput" />
              <RemoveFile Id="PurgeAppNameAppDataOutput" Name="*.*" On="uninstall" />
              <RemoveFolder Id="idDirAppNameAppDataOutputRemove" On="uninstall" Directory="dirAppNameAppDataOutput" />
            </Component>
          </Directory>

1 Ответ

0 голосов
/ 17 мая 2019

Предложение : Короче говоря, переместите шаблон куда-нибудь под: %ALLUSERSPROFILE%.


ACL для файла / папки : Причиной могут быть фактические настройки ACL в самой папке профиля пользователя.Не могли бы вы попробовать запустить откуда-нибудь под %ALLUSERSPROFILE%?Должно ли быть доступно для записи по умолчанию?

В современных системах Windows, которые обычно отображаются на: C:\ProgramData (в более старых системах где-то еще).Я думаю, учетная запись SYSTEM должна иметь полный доступ здесь?Попробуйте?


Тестовый путь : Чтобы проверить этот путь: Ключ Windows + Нажмите R .Вставьте %ALLUSERSPROFILE% и нажмите OK .

Также: Откройте cmd.exe и перейдите "set "(без кавычек), чтобы увидеть переменные среды и их значения.Может быть полезнымПросто добавьте для удобства (это хорошо известно).


DCOM Permissions : COM-серверы имеют связанные разрешения для запуска.Некоторые инструменты и комментарии, которые помогут вам в отладке:

  • По умолчанию : Есть некоторые права по умолчанию DCOM , установленные в:comexp.msc.

    • Запуск: Ключ Windows + Коснитесь R .Вставьте comexp.msc и нажмите OK .
    • Щелкните правой кнопкой мыши My Computer => Properties => COM-Security.
    • У меня естьне очень посмотрел на эти настройки.Много гибкости, мало вещей, которые имеют смысл?
  • Конкретные : в реестре также могут быть установлены определенные разрешениядля каждого класса COM.Может быть, проверить с помощью oleview.exe (или напрямую с помощью regedit.exe)?

    • Найти oleview.exe в папках Windows SDK,Найдите диск под: %ProgramFiles(X86)%\Windows Kits\[SDK-VERSION-NUMBER-HERE]\bin.
    • Найдите свой класс (пример ниже: Scripting.Dictionary).См. Вкладки "Launch Permissions" и "Access Permissions".

    oleview.exe

Не могу вспомнить, что видел здесь много пользовательских настроек для приложений Office, я могу ошибаться.У меня нет Office для тестирования в данный момент.

...