2009-07-09 9 views
1

J'écris un service Windows qui prend un fichier téléchargé, exécute le fichier signtool.exe dessus pour effectuer la signature et l'horodatage, puis restitue le fichier signé.Comment définir le proxy http dans un sous-shell lancé à partir d'un service Windows

Le code pour cela fonctionne lorsqu'il est exécuté en tant que serveur autonome en utilisant twisted mais si j'essaie de l'exécuter en tant que service, il échoue avec l'erreur "Signing a réussi, mais une erreur s'est produite lors de la tentative d'horodatage".

Si je remplace l'appel de sous-processus de code de connexion par un appel curl.exe qui utilise explicitement le proxy, cela réussit.

J'ai défini le proxy dans Internet Explorer et l'exécution de la commande fonctionne manuellement. Existe-t-il un autre moyen de définir un proxy http pour le signtool/signcode ou un autre moyen de le faire (je souhaite que ce soit un service facilitant l'intégration dans d'autres systèmes de surveillance)?

Répondre

1

Les services de veuves sont étranges dans la mesure où ils s'exécutent sur une session winlogon distincte avec des informations d'identification limitées. Pouvez-vous me faire savoir ce qui suit pour essayer d'aider à déboguer ce ...

  1. Qu'est-ce que les informations d'identification sont en cours d'exécution, vous le service sous (NetworkService?)
  2. Quel est le résultat de l'une ou l'autre « proxycfg » ou « netsh winhttp show proxy "(selon votre version de Windows.) Ces outils de ligne de commande vous diront quel proxy est défini pour les programmes shell.
0

J'ai le même problème mais en cours d'exécution signtool via cygwin ssh (en utilisant un mot de passe). L'horodatage ne fonctionne que via le proxy et sur ssh si je me connecte au moins une fois via le gui (par exemple via rdesktop). Je n'ai même pas besoin d'être connecté au gui après ça pour que ça fonctionne via ssh, il faut juste que je me connecte au moins une fois via le gui. Quoi qu'il fasse lors de la connexion graphique survit à un redémarrage aussi. Une différence est toutefois que je définir les paramètres de proxy dynamiquement en utilisant la même que Powershell je lance via ssh:

$reg_key = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 
Set-ItemProperty -path $reg_key ProxyServer -value 192.168.0.3:8888 
Set-ItemProperty -path $reg_key ProxyOverride -value "<local>" 
Set-ItemProperty -path $reg_key ProxyEnable -value 1 

J'ai essayé de lancer explorer.exe &, bloc-notes & et iexplorer.exe & de ssh mais ça n'a pas aidé. Je vais voir à propos de coder les paramètres de proxy et aussi s'il est possible que l'utilisateur de la signature soit connecté à l'interface graphique après le démarrage. Va également vérifier pour s'assurer que ssh est lancé avec cygrunsrv -i ou qu'il est autorisé à interagir avec le bureau est vérifié dans les services. Le système rétablit son image si elle est arrêtée (image delta vmware) (c'est comme ça que je peux reproduire le problème), mais je peux toujours le changer, ce que je devrais peut-être faire pour comprendre problème.

Enfin figured it out avec l'aide du commentaire ici:

http://blogs.msdn.com/b/askie/archive/2013/05/09/user-proxy-settings-showing-up-in-local-system-account-correct-way-to-apply-proxy-settings.aspx#10606266

On dirait que le réglage doit effectivement être défini dans le fichier binaire:

HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings 

Ce binaire Le fichier n'est créé dans le registre qu'après la connexion graphique, même avec les paramètres PowerShell que j'ai définis plus haut.Le moyen le plus simple est de vous connecter (en supposant que vous avez les paramètres de registre ci-dessus avec PowerShell, ou de le configurer manuellement via les options internet dans le GUI), exporter le chemin HKEY_Current_User \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections, et l'importation avec:

regedit /s path_to_proxy_settings.reg 

Si vous voulez appliquer pour tous les utilisateurs, vous devez appliquer le même fichier sous:

HKEY_LOCAL_MACHINE\\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections 

comme mentionné dans le poste. Il peut y avoir d'autres façons comme mentionné ici https://serverfault.com/questions/34940/how-do-i-configure-proxy-settings-for-local-system, mais ce qui précède a été le plus facile pour moi.

Questions connexes