2009-10-01 8 views
1

J'ai créé un programme d'installation (via WiX) qui, dans le cadre de l'installation, installe un service Windows (écrit en C#) et démarre ce service Windows. Le service est un FileSystemWatcher et surveille l'installation des plug-ins dans un répertoire spécifique. A l'origine, il a utilisé une variable d'environnement (qui a le chemin que je voulais regarder) qui a été créé par l'installateur WiX, mais il a été créé dans un répertoire distinct comme indiqué ci-dessous:Service ne pouvant pas voir la variable d'environnement

<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> 

Maintenant, je fais presque la même chose, mais la variable d'environnement est créé dans le même répertoire (KeyPath?) comme ceci:

<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 

la question est, avec la première méthode, le service a bien fonctionné. Il démarre, trouve le chemin associé à la variable d'environnement et surveille le répertoire. Avec la deuxième méthode, cependant, cela n'arrive plus. Le service ne voit JAMAIS la variable d'environnement. La variable est créée, le service est démarré, mais il ne le voit jamais ... même si je redémarre, etc. C'est un problème vraiment embarrassant car cela n'a aucun sens.

Des suggestions?

Répondre

0

Pour répondre à ma propre question, il semble que le programme d'installation requis le système à redémarrer afin de voir les changements aux variables d'environnement. C'est après que j'ai essayé d'arrêter et de démarrer le service entre autres choses. Je ne sais pas pourquoi c'est parce que ça fonctionnait avant (sans redémarrer le système).

0

cela pourrait être une idée stupide, mais avez-vous essayé de déplacer les composants? Je vois dans votre premier article que vous avez le composant qui crée le service en premier, puis le composant avec la variable d'environnement. choses devraient se produire dans le même ordre, peu importe quoi, mais je ne vois rien de mal avec votre code autrement

+0

J'ai effectivement essayé ceci, et cela n'a pas semblé résoudre le problème. J'ai été forcé de redémarrer pour voir les changements de variables d'environnement que je n'avais pas à faire auparavant. – JasCav

Questions connexes