J'ai écrit un économiseur d'écran en C# et Windows Forms. Pour tester j'ai été paresseux et juste utilisé le fichier de configuration pour tous mes paramètres (pas encore de dialogue de paramètres), mais le programme semble être incapable de trouver ou de lire le fichier de configuration lorsque Windows exécute l'économiseur d'écran..Net Screensaver ne trouve pas de fichier de configuration
Cela fonctionne lorsque j'utilise le bouton de prévisualisation ou l'exécuter manuellement de toute façon, c'est seulement quand il atteint le délai d'attente de l'écran qu'il est incapable de trouver le fichier de configuration.
Après l'avoir journal AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Il retourne le nom abrégé: C:\Windows\System32\MYSCRE~1.config
où il devrait être C:\Windows\System32\MyScreenSaverName.scr.Config
Je devine que le problème est qu'il ne peut pas trouver le fichier de configuration du chemin de nom court.
Vous ne savez pas si c'est dû au compte système sous lequel Windows 7 exécute les économiseurs d'écran, ou à quelque chose d'autre sur la façon dont il s'exécute. Toute information serait utile, merci.
Edit: Essayer de trouver des différences:
- La seule différence que je peux trouver est que
Environment.CommandLine
retoursC:\Windows\system32\MYSCRE~1.SCR /s
lorsque Windows fonctionne l'économiseur d'écran, mais il a la voie normale quand je le lance - Tout sous
Process.GetCurrentProcess().StartInfo
est le même WindowsIdentity.GetCurrent().Name
est mon nom de compte
En regardant d'autres questions, il semble que User32 est ce qui démarre les économiseurs d'écran, donc je pense qu'il doit y avoir quelque chose sur la façon dont cela démarre le processus scr.
Contournement: Renommer mon fichier .scr pour qu'il comporte 8 caractères ou moins lui permet de fonctionner correctement. Donc, cela fonctionne pour l'instant, aimerait toujours savoir pourquoi ce problème existe.
Je rencontre le même problème. Mais la solution de contournement fonctionne pour moi aussi ... – Jan
Parce que le code qui exécute les économiseurs d'écran a toujours la limitation de 8 caractères DOS/vieux Windows avait? Comme C: \ Progra ~ \ Donc, si vous appelez le AppDomain et que vous modifiez le fichier de configuration en "a.config", peut-être que cela fonctionnera sans que le nom du fichier soit inférieur à 8 symboles. Comme: AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "c: \\ this_is_a_long_config_file.config"); NOTE: Ceci est une supposition sauvage qui est pourquoi je l'ai ajouté comme un commentaire et non une réponse. –