2011-10-18 14 views
8

Ho scritto uno screen saver in C# e Windows Form. Per i test sono stato pigro e ho appena usato il file di configurazione per tutte le mie impostazioni (nessuna finestra di dialogo delle impostazioni ancora), ma il programma sembra non essere in grado di trovare o leggere il file di configurazione quando Windows esegue lo screensaver.. Net Screensaver non trova il file di configurazione

Funziona quando uso il pulsante di anteprima o lo eseguo manualmente in qualsiasi modo, è solo quando raggiunge il timeout dello screensaver che non è in grado di trovare il file di configurazione.

Averlo registrare AppDomain.CurrentDomain.SetupInformation.ConfigurationFile Esso restituisce il nome breve: C:\Windows\System32\MYSCRE~1.config dove dovrebbe essere C:\Windows\System32\MyScreenSaverName.scr.Config

Così sto cercando di indovinare il problema è che non è possibile trovare il file di configurazione con il percorso nome breve.

Non sono sicuro se è dovuto all'account di sistema su cui Windows 7 esegue gli screen saver o qualcos'altro su come viene eseguito. Qualsiasi informazione sarebbe utile, grazie.

Edit: Cercando di trovare le differenze:

  1. unica differenza che posso trovare è che Environment.CommandLine restituisce C:\Windows\system32\MYSCRE~1.SCR /s quando Windows esegue lo screen saver, ma ha il percorso normale quando l'eseguo
  2. Tutto sotto Process.GetCurrentProcess().StartInfo è lo stesso
  3. WindowsIdentity.GetCurrent().Name è il mio nome conto

Guardando ad altre domande, sembra che User32 sia ciò che avvia gli screensaver, quindi immagino che debba essere qualcosa su come avviare il processo scr.

Work Around: Rinominare il mio file .scr per avere 8 caratteri o meno consente di funzionare correttamente. Quindi, per ora funziona, piacerebbe ancora sapere perché questo problema esiste.

+0

Ho riscontrato lo stesso problema. Ma la soluzione funziona anche per me ... – Jan

+2

Perché il codice che esegue gli screensaver ha ancora il limite di 8 caratteri DOS/vecchio Windows? Come C: \ Progra ~ \ Quindi se si chiama AppDomain e si cambia il file di configurazione in "a.config", forse funzionerà senza rinominare il file con meno di 8 simboli. Ad esempio: AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "c: \\ this_is_a_long_config_file.config"); NOTA: si tratta di un'ipotesi spontanea, motivo per cui l'ho aggiunto come commento e non come risposta. –

risposta

1

modifica: ouch ... Ho notato troppo tardi che si tratta di una domanda di un anno .... beh, forse qualcuno può trovare comunque utile questo.


Sei sicuro che il filesystem non è grasso/fat32 invece di ntfs?

Forse è un Win7 aggiornato da un vecchio sistema formattato fat/fat32? (e quindi fs non sono stati aggiornati)?

Forse mi sbaglio, è solo la mia ipotesi di vedere i nomi brevi sul posto. Recentemente ho lavorato a un progetto di salvaschermo in C# e non ho riscontrato alcun problema ... Non vedo i nomi brevi da secoli ad essere onesti ...

Si dovrebbe vedere il tipo di fs da Gestione disco. Facendo qualche ricerca ho ottenuto anche questo, verificare se FUTIL.EXE può aiutare, v'è una curiosa opzione "disable8dot3" proprio lì:

http://commandwindows.com/fsutil.htm