2009-10-01 6 views
1

Я создал установщик (через WiX), который в рамках установки устанавливает службу Windows (написанную на C#) и запускает эту службу Windows. Служба является FileSystemWatcher и следит за установкой подключаемых модулей в конкретный каталог. Первоначально он использовал переменное окружение (который указал на путь я хотел смотреть), который был создан установщиком WiX, но она была создана в отдельном каталоге, как показано ниже:Сервис не способен видеть переменную окружения

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="AppFolder" Name="MyApp"> 
      <Component Id="WatcherService" Guid="[MY GUI ID]"> 
       <File Id="WatcherEXE" Name="watcher.exe" DiskId="1" Source="../Watcher/bin/Release/Watcher.exe" KeyPath="yes" /> 
       <ServiceInstall Id="Watcher" Name="PlugInWatcher" DisplayName="Plug-in Watcher" Type="ownProcess" Start="auto" 
           ErrorControl="normal" Description="Monitors the plug-in folder for new and deleted plug-ins." Account="[SERVICEACCOUNT]" Password="[SERVICEPASSWORD]" /> 
       <ServiceControl Id="StartWatcherService" Name="PlugInWatcher" Start="install" Wait="no" /> 
       <ServiceControl Id="StopWatcherService" Name="PlugInWatcher" Stop="both" Wait="yes" Remove="uninstall" /> 
      </Component> 
     </Directory> 
    </Directory> 

    <Directory Id="CommonAppDataFolder" Name="CommonAppData"> 
     <Directory Id="MyAppData" Name="MyAppData"> 
      <Directory Id="PluginAppData" Name="Plugins"> 
       <Component Id="PluginDir" Guid="[MY GUI ID]"> 
        <CreateFolder Directory="PluginAppData" /> 
        <RemoveFolder Id="PluginDir" On="uninstall" /> 
        <Environment Id="PluginVar" Name="PLUGIN_DIR" Action="set" Permanent="no" System="yes" Value="[PluginAppData]" /> 
       </Component> 
      </Directory> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 
</Directory> 

Теперь, я делаю почти то же самое, но переменная окружения сейчас создается в той же директории (ключевого пути?), как это:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="AppFolder" Name="MyApp"> 
      <Component Id="PluginDir" Guid="[MY GUI ID]" KeyPath="yes"> 
       <Environment Id="PluginVar" Name="PLUGIN_DIR" Action="set" Permanent="no" System="yes" Value="[MyApp]" /> 
      </Component> 

      <Component Id="WatcherService" Guid="[MY GUI ID]"> 
       <File Id="WatcherEXE" Name="watcher.exe" DiskId="1" Source="../Watcher/bin/Release/Watcher.exe" KeyPath="yes" /> 
       <ServiceInstall Id="Watcher" Name="PlugInWatcher" DisplayName="Plug-in Watcher" Type="ownProcess" Start="auto" 
           ErrorControl="normal" Description="Monitors the plug-in folder for new and deleted plug-ins." Account="[SERVICEACCOUNT]" Password="[SERVICEPASSWORD]" /> 
       <ServiceControl Id="StartWatcherService" Name="PlugInWatcher" Start="install" Wait="no" /> 
       <ServiceControl Id="StopWatcherService" Name="PlugInWatcher" Stop="both" Wait="yes" Remove="uninstall" /> 
      </Component> 
     </Directory> 
    </Directory> 
</Directory 

этот вопрос, с первым методом, услуга работала нормально. Он запустится, найдите путь, связанный с переменной окружения, и проверит каталог. Однако со вторым методом этого больше не происходит. Служба NEVER видит переменную окружения. Переменная создается, служба запускается, но она ее никогда не видит ... даже если я перезагружаюсь и т. Д. Это действительно запутанная проблема, потому что и не имеет никакого смысла, почему.

Любые предложения?

ответ

0

Чтобы ответить на мой собственный вопрос, кажется, что программа установки требуется, чтобы система была перезапущена, чтобы увидеть изменения переменных среды. Это после того, как я попытался остановить и начать службу среди прочего. Я не уверен, почему это происходит из-за того, что он работал до (без перезапуска системы).

0

Это может быть глупая идея, но вы пробовали перемещать компоненты вокруг? Я вижу в вашей первой части, что у вас есть компонент, который сначала создает службу, а затем компонент с переменной env. вещи должны происходить в том же порядке, независимо от того, что, но я не вижу ничего плохого с кодом иначе

+0

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

Смежные вопросы