2009-04-22 41 views
7

Una delle cose che preferisco di possedere un dispositivo di memoria flash USB è trasportando intorno ad una serie di strumenti utili con me. Mi piacerebbe scrivere alcuni strumenti e farli funzionare bene in questo tipo di ambiente. Conosco C# best, e sono produttivo in esso, così ho potuto ottenere un'applicazione Windows form in un attimo.scrittura USB azionamento applicazioni portatili in C#

Ma quali considerazioni dovrei spiegare nel fare un app portatili? A pochi riesco a pensare, ma non conosco le risposte a:

1) Portabilità della lingua - Ok, so che qualsiasi macchina su cui lo uso richiede un runtime .NET da installare. Ma visto che uso solo poche macchine Windows regolarmente, questo non dovrebbe essere un problema. Potrei usare un altro linguaggio per codificarlo, ma poi perdo la produttività soprattutto per quanto riguarda un semplice designer di moduli. Ci sono altri problemi con l'esecuzione di un'app .NET da un'unità flash?

2) Cicli di lettura/scrittura - In C#, come posso assicurarmi che la mia applicazione non stia scrivendo inutilmente sull'unità? Ho sempre il controllo delle scritture o ci sono "scritture nascoste" che devo rendere conto?

3) Questione aperta: ci sono altre questioni relative alle applicazioni portatili che dovrei essere a conoscenza, o forse un suggerimento a altre lingue con buone IDE che mi avrebbe ottenere un analogo livello di produttività, ma una migliore portabilità?

risposta

10
  • 1) Non ci dovrebbero essere problemi in esecuzione un'applicazione .NET da un lampo unità.
  • 2) Si dovrebbe avere il controllo della maggior parte delle operazioni di scrittura . Essere sicuri che si scrive a temperatura o qualche altra posizione sul disco rigido , e non sul flash unità.Ma i cicli di scrittura non devono essere un problema - anche con moderato/intenso uso la maggior parte dei flashdrive hanno una durata di vita di anni.
  • 3) Basta trattarlo come è fatto qualsiasi applicazione che ha xcopy distribuzione stile e cercare di spiegare per la vostra applicazione con grazia in mancanza se qualche dipendenza non è sulla scatola.
0

In realtà non ho alcuna esperienza con questo, quindi potrebbe essere meglio prendere ciò che dico con un pizzico di sale. Ma ecco il mio punto di vista:

Non è necessario fare nulla di speciale.

Non è in realtà una considerazione di uno sviluppatore di applicazioni su come e quando le scritture sono fatte su un disco, che è qualcosa che è molto meglio controllato dal sistema operativo. So che cache di Windows scrive su unità USB, quindi mi fiderei che lo gestisca.

L'unica cosa che dovete considerare è che non verrà installata l'applicazione. Quindi è necessario assicurarsi che lo si progetta per l'esecuzione interamente autonomo all'interno della directory in cui è distribuito. Opzionalmente è anche possibile scrivere alcune scritture nella home directory degli utenti, ma questo deve essere fatto attraverso le variabili d'ambiente appropriate.

Scriverò e vedrò se c'è qualcosa di speciale su un'unità flash che il sistema operativo non gestisce.

+0

Se l'unità è ottimizzata per la rimozione rapida, e la maggior parte delle unità flash sono, Windows scriverà e non cache. – Michael

+0

Se l'unità è ottimizzata per una rimozione rapida, c'è qualche motivo per non rispettare i desideri degli utenti e scrivere immediatamente? Se l'unità ha il requisito che le scritture vengano memorizzate nella cache, accendere il supporto del sistema operativo anziché eseguirne il reimplement. –

+0

@JayArr - Stavo commentando la dichiarazione che Windows memorizza nella cache le unità flash USB. In generale, questo non è vero. – Michael

0

io in realtà non hanno risposte per 1 # o # 3. Ma per il n. 2, il CLR .NET non dovrebbe scrivere nella cartella "installazione" di un'applicazione (ad esempio, l'unità flash) a meno che il codice non indichi specificamente o stia utilizzando e modificando le impostazioni basate su file (ini, xml, ecc.) che vive con l'app.

Il numero 1 è davvero il kicker se non stai solo scrivendo le cose per uso personale. Ovviamente è impossibile ospitare una copia portatile del CLR completo sulla chiavetta USB. Ma ci sono strumenti in grado di scansionare l'assembly per le sue dipendenze e impacchettarlo in un file .exe standalone in modo che il CLR non debba necessariamente essere installato sul sistema di destinazione.

2

Se si desidera utilizzare oggetti COM, utilizzare reg-free com e includere gli oggetti COM con il programma.

2

Dovresti sempre avere il controllo delle tue scritture. Le applicazioni devono essere caricate nella RAM all'avvio, quindi la memoria passata viene allocata nella RAM, quindi non viene scritto nulla sull'unità flash.

La cosa più importante per un'applicazione portatile è che in pratica non è necessaria alcuna installazione per l'applicazione. Non si vuole dipendere in particolare dai valori del registro, poiché l'applicazione non verrà "installata" su altri computer.

Uno dei problemi con le applicazioni portatili che è possibile considerare è la persistenza dei dati. In genere, si scrive nella cartella Dati applicazioni di un utente per salvare i dati. Se questo è il caso, qualsiasi dato salvato verrà applicato solo all'utente sul computer. Se si desiderano dati dell'applicazione locali, è possibile creare un file XML Serializzato per le impostazioni e archiviarlo localmente nella directory dell'applicazione. Questa scrittura di file sarebbe probabilmente l'unica azione di scrittura di cui dovresti preoccuparti.

Per il problema della portabilità .NET, è anche possibile scrivere un piccolo programma di immissione in C++, che verifica se il computer ha installato .NET. .NET ha valori di registro che puoi verificare per vedere le versioni installate, quindi se .NET è installato, esegui la tua applicazione, altrimenti visualizza un messaggio che informa che .NET deve essere installato per primo.

Modifica: Vorrei aggiungere che sviluppo applicazioni per macchine ad ultrasuoni utilizzando XAML in C# 3.0. L'applicazione che scrivo funziona perfettamente da un'unità flash USB, mentre tutte le impostazioni dell'utente sono memorizzate su base AppData locale, quindi non viene scritto nulla sull'USB. Mentre l'applicazione può essere installata tramite un programma di installazione .exe, il programma di installazione non scrive alcun valore di registro da cui l'applicazione dipende.