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:
- unica differenza che posso trovare è che
Environment.CommandLine
restituisceC:\Windows\system32\MYSCRE~1.SCR /s
quando Windows esegue lo screen saver, ma ha il percorso normale quando l'eseguo - Tutto sotto
Process.GetCurrentProcess().StartInfo
è lo stesso 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.
Ho riscontrato lo stesso problema. Ma la soluzione funziona anche per me ... – Jan
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. –