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