Strano, possibile problema di "copia shadow" in cui due editor mostrano contenuti diversi


2

Ho del codice che legge un file di configurazione, ma quando apro il file in TextPad, vedo valori diversi rispetto alla mia applicazione. L'ho controllato con Blocco note. Blocco note è d'accordo con la mia applicazione, TextPad mostra qualcos'altro.

Questo è su Vista x64 Business.

Qualche idea di cosa potrebbe causare questo? Ho guardato nei Context Menu->Properties->Previous Versionsdettagli, ma dice "Non ci sono versioni precedenti disponibili".

Mi è stato chiesto un esempio, ecco i passaggi per replicare (non posso farlo accadere in modo affidabile):

  1. App .NET installata nei file di programma.
  2. Quell'app legge il file di configurazione, ma sta cadendo.
  3. Modifico manualmente quel file di configurazione in Textpad.
  4. Il cambiamento non ha effetto.
  5. Apro il file di configurazione in Blocco note e vedo qualcosa di diverso.
  6. Prova a apportare le modifiche in Blocco note e nel salvataggio e ricevi questo messaggio di errore:

Bloc notes

Impossibile creare il file C: \ Programmi (x86) \ Daniel Schaffer \ WorkingOn per FogBugz \ FogBugz> WorkingOn.exe.config.

Assicurarsi che il percorso e il nome del file siano corretti.

Non posso inserire qui il contenuto in quanto è XML e viene codificato da Superuser.com, ma ecco un link a uno screencast: http://screencast.com/t/zhERl7mocp4 .


Puoi pubblicare un esempio. Senza ulteriori dettagli sarà difficile diagnosticare il problema
ChrisF,


Se si contrassegna l'XML come codice, questo dovrebbe essere pubblicato così com'è.
ChrisF,

Risposte:


6

Probabilmente ti imbatti in una parte delle funzionalità di Controllo dell'account utente di Vista denominata Virtual Store . Ecco uno snippet dall'articolo:

Quando un'applicazione scrive in un percorso di sistema scrivibile solo dagli amministratori, Windows quindi scrive tutte le successive operazioni sui file in un percorso specifico dell'utente nella directory di Virtual Store, che si trova in% LOCALAPPDATA% \ VirtualStore. Successivamente, quando l'applicazione rileverà questo file, il computer fornirà quello nel Virtual Store. Poiché l'infrastruttura di sicurezza di Windows elabora la virtualizzazione senza l'assistenza dell'applicazione, l'applicazione ritiene che sia stata in grado di leggere e scrivere correttamente in Programmi. La trasparenza della virtualizzazione dei file consente alle applicazioni di percepire che stanno scrivendo e leggendo dalla risorsa protetta, quando in realtà accedono alla versione virtualizzata.

L'applicazione è in esecuzione in un contesto non elevato (non amministratore). Pertanto, quando tenta di aprire il file nella cartella Programmi, tale richiesta viene reindirizzata in modo trasparente alla posizione del tuo negozio virtuale degli account utente. La tua copia di TextPad è probabilmente in esecuzione in un contesto elevato e quindi sta vedendo il file che si trova nella vera cartella Programmi.

Se questo è il codice di cui è possibile modificare la funzionalità e si desidera che gli utenti possano usarlo senza eseguirlo come amministratore, è necessario modificare la posizione in cui archiviare i file di configurazione in un punto della cartella ApplicationData dell'utente a cui appartiene. La scrittura di impostazioni in un file di configurazione memorizzato nella cartella di installazione dell'applicazione è altamente sconsigliata in questi giorni. Se hai davvero delle impostazioni che dovrebbero essere applicate a tutti gli utenti sulla macchina, dovresti invece scriverle nella cartella Dati applicazioni di tutti gli utenti. E anche in questo caso, dovrai comunque eseguire l'app in un contesto Elevato per impostazione predefinita, a meno che tu non conceda esplicitamente al gruppo Utenti l'accesso in scrittura alla tua cartella.

Tieni questo mantra in testa mentre scrivi software per Vista e oltre. "Gli utenti possono solo scrivere sul proprio profilo ... Gli utenti possono solo scrivere sul proprio profilo"


0

Il motivo per cui Notepad non è in grado di creare il file è che un altro processo lo sta bloccando. Poiché il contenuto del file cambia, suppongo che l'app scriva il file mentre lo guardi.


Ma come si spiega che il textpad che apre il file e il blocco note che apre lo stesso file stanno ottenendo un testo diverso?
Neil Barnwell,

1
Textpad legge il file, l'app modifica il file, Blocco note legge il nuovo file
Aaron Digulla,

Se l'app non è in esecuzione, questo comportamento è estremamente strano. Installa "ProcessExplorer" e usa "Trova handle" con il nome file quando Blocco note rifiuta di salvare il file per trovare il processo che lo sta bloccando.
Aaron Digulla,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.