2011-10-18 5 views
8

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:

  1. La seule différence que je peux trouver est que Environment.CommandLine retours C:\Windows\system32\MYSCRE~1.SCR /s lorsque Windows fonctionne l'économiseur d'écran, mais il a la voie normale quand je le lance
  2. Tout sous Process.GetCurrentProcess().StartInfo est le même
  3. 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.

+0

Je rencontre le même problème. Mais la solution de contournement fonctionne pour moi aussi ... – Jan

+2

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

Répondre

1

éditer: ouch ... J'ai remarqué trop tard que c'est une question de 1 an ... bien peut-être quelqu'un peut trouver cela utile de toute façon. Etes-vous sûr que le système de fichiers n'est pas gras/fat32 au lieu de NTFS?

Peut-être que c'est un Win7 mis à jour à partir d'un ancien système formaté fat/fat32? (et donc fs n'ont pas été mis à jour)?

Peut-être que je me trompe, c'est juste ma conjecture de voir des noms courts en place. J'ai récemment travaillé sur un projet d'économiseur d'écran en C# et je n'ai rencontré aucun problème ... Je ne vois pas de noms courts depuis des siècles pour être honnête ...

Vous devriez voir le type fs de la gestion des disques. Faire des recherches aussi je suis arrivé ce, vérifier si FUTIL.EXE peut aider, il y a une option « disable8dot3 » curieux là:

http://commandwindows.com/fsutil.htm

Questions connexes