L’installazione di MSMQ non resiste al primo softreset su WM 5.0 e ipaq rx1950 – Part II

Aggiungo qualche ulteriore dettaglio riguardo questo problema, secondo me discretamente serio, che ho iniziato a esporre nel mio post precedente

Alla fine c’è voluto il supporto PSS di Microsoft. Il problema risiede nel fatto che WM5.0 ha una gestione complessa del registro: per questioni di performance questo viene sempre tenuto in memoria.

Microsoft ha predisposto una chiamata di sistema mediante la quale è possibile chiedere al sistema operativo di serializzare il registro e di renderlo persistente. Questa funzione, teoricamente, dovrebbe essere gestita dall’OEM (il produttore del device: nel mio caso HP) al fine di amministrare correttamente queste fasi, ad esempio per un salvataggio periodico ogni tot minuti o all’accadere di eventi particolari, tipo un soft-reset.

A me sembra logico pensare che prima di un soft-reset, le eventuali modifiche sul registro debbano essere salvate sul filesystem. Per qualche motivo HP non ritiene (almeno in questa versione della rom) che questo sia il caso.
(Nota: è ovvio pensare che l’uso del registro per applicazioni personali non si a del tutto corretto: è inutile appesantirlo per le proprie impostazioni, meglio usare un file config. Anche se a volte è utile poter salvare un’informazione in un posto un po’ più protetto…)

Tornando a noi, al softreset, tutte le modifiche al registry vengono perse!!

Per ovviare a ciò, è possibile chiamare la funzione RegFlushKey che si occupa di forzare la serializzazione. Attenzione, anche a detta di Microsoft, questa funzione potrebbe non fare niente!!! E’ a discrezione del OEM definire la modalità di persistenza del registro, a seconda delle caratteristiche del device.

Riporto il codice che io ho utilizzato e che ho trovato sul newsgroup microsoft.public.dotnet.framework.compactframework su segnalazione di Raffaele Limosani di MS che ringrazio:

[DllImport(“CoreDll.dll”, EntryPoint = “RegFlushKey”, SetLastError = true)]
private static extern uint RegFlushKey(uint hKey);

private void menuRegistry_Click(object sender, EventArgs e)
{

try
{

long reg = RegFlushKey(0x80000002);
if
(reg == 0)
   MessageBox.Show(“Registro Salvato”);

}
catch (Exception
ex)
{
MessageBox.Show(“Errore: “
+ System.Runtime.InteropServices.Marshal.GetLastWin32Error().ToString());
}

}

Una volta effettuato le modifiche sul registro, ad esempio a seguito della registrazione di MSMQ, lanciando il RegFlushKey e facendo un soft-reset, il tutto funziona correttamente.

Io su questo piccolo dettaglio ci ho speso quasi tre settimane… Spero sia di aiuto a qualcuno di voi.
Ciao!

Deployment di applicazioni x PPC tramite autorun su schede SD

Riporto giusto qualche info di riferimento nel caso doveste avere anche voi l’esigenza di distribuire una vostra applicazione tramite schede SD.

Anche queste schede, come i cd-rom per pc, supportano l’esecuzione di un programma autorun, con qualche piccola complicazione in più derivante dal fatto che cpu dei ppc sono di tecnologie diverse.
Per ogni cpu c’è una cartella particolare da utilizzare, all’interno della quale è necessario inserire un programma autorun.exe, all’inserimento della scheda sd, verrà copiato nella directory windows (in WM 5.0 la directory è windowsautorunStorage Card1, uno per ogni storage card) e da li lanciato con parametro install; alla rimozione della scheda sd, lo stesso comando verrà rilanciato con parametro uninstall, per poter eventualente gestire anche questo evento.

Ovviamente l’autorun poi  potrà lanciare l’installazione del vostro applicativo, nel caso in cui non sia stato mai installato, o non fare niente nel caso in cui sia già installato.

Per maggiori info:
http://blogs.msdn.com/marcpe/archive/2005/06/17/430123.aspx
http://www.informit.com/guides/printerfriendly.asp?g=security&seqNum=91&rl=1
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win_ce/html/pwc_AutoRun.asp

 

L’installazione di MSMQ non resiste al primo softreset su WM 5.0 e ipaq rx1950

Alle volte la vita è veramente molto molto dura.

E’ circa due settimane che combatto come un matto con il componente MSMQ, all’inizio con le stringhe di connessione (alle quali è necessario fare MOLTA attenzione) e successivamente con l’installazione nel device.

Per quanto riguarda le stringhe dovevo inviare un messaggio ad una coda transazionale residente su un pc con windows XP, residente in rete locale.
Il tutto si è risolto impostando come stringa di connesione:
FormatName:Direct=OS:servernameprivate$MyQueueTX;XACTONLY
attenzione anche ad impostare correttamente l’opzione del MessageQueueTransactionType durante la send del messaggio.

La seconda parte del problema (più snervante) è che a seguito dell’installazione del componente MSMQ nel device, e del relativo soft-reset, il componente non risultava installato.

Nel dettaglio, una volta installato msmq.cab, da windowsvisadmin eseguivo:
– Shortcut -> install
– Shortcut -> register
– Shortcut -> Verify
il quale riportava che il componente era stato correttamente installato e registrato

e poi il soft-reset che è consigliato (ma che in WM 5.0 non dovrebbe essere necessario.
Anyway, a seguito del softreset, tornando su visadmin, verify, il msmqadm riportava che il componente non era ne installato ne registrato!!!!

Come si è risolto?!? Prima di effettuare il softreset, giusto dopo l’installazione, ho aperto  il componente “ipaq wireless”, attivato e disattivato la connessione wireless (non è necessario che sia connessa, basta accendere e subito spegnere).

Dopo il softreset il tutto sembra funzionare correttamente.
Ma il mondo dello sviluppatore (che è anche ovviamente un sistemista prima di tutto) dev’essere sempre così difficile?

Cercherò di approfondire la cosa perchè comunque il tutto non mi convince.

Vi lascio una serie di articoli che io ho usato per testare mille e una volta il tutto:

Infine secondo me molto ben fatto questo esempio da MS:
http://msdn2.microsoft.com/en-us/library/ms180970.aspx

Merge Replication con SQL 2005 Mobile edition e MSDE

Non so chi di voi su è imbattuto nell’esigenza di far funzionare le repliche di sql 2005 ME e MSDE. Il tutto fila via abbastanza liscio, sempre avendo chiare tutte le componenti, se non si considera le imcopatibilità (almeno attuali) di alcuni componenti.

Io sono riuscito a far funzionare il tutto per il meglio SOLO SOLO SOLO con l’sp3a di MSDE. Per quanto riguarda il service pack 4 (SP4): No Way! Non c’è verso di far funzionare i relativi replication components.
Ci sono moltissimi post in rete e nessuna attuale soluzione: vi sconsiglio di usarli per ora.
(BTW: l’errore che si ottiene anche avendo installato i replication components SP4; il messaggio riportato è che i compoennti non risultano installati, anche se evidentemente ci sono)
Per qualche conferma: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=89751&SiteID=1

Ok, per mettere impiedi il tutto, per quanto riguarda la parte server, dovete installare prima di tutto

Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) Release A – Sp3a occhio ai vari parametri da dare da command line, es:  setup.exe SAPWD=”Password” SECURITYMODE=sql, io ho notato che alcune volte usare il file .ini non funziona a dovere, anche partendo da un winXpPro appena installato). Se avete problemi, usate l’opzione per avere un po’ di log dell’installazione lanciando gli switch /L*v C:MSDE_setup.log

Successivamente dovete eseguire Microsoft SQL Server 2000 Replication Components, che servono per abilitare le repliche lato SQL (il componente c’è già su SQL server 2000, ma manca su msde).
Si può trovare sotto C:ProgrammiMicrosoft Visual Studio 8SmartDevicesSDKSQL ServerMobilev3.0sql2kensp3a.msi o scaricandolo da MS

Il passo successivo è Microsoft SQL Server 2005 Mobile Edition Server Tools. Questi componenti sono fondamentalmente un’estensione web per permettere la sincronia dal palmare verso sql. Di fatto il device si connetterà via HTTP all’isapi installata, la quale si preoccuperà di invocare il reconciler per la replica.
Questo componente si trova sotto C:ProgrammiMicrosoft SQL Server90ToolsBinnVSShellCommon7IDEsqlce30setupen.msi nel caso abbiate installato la il Management studio di SQL (l’enterprise manager nuovo per capirci).

Ora, per completare il tutto vi manca la configurazione delle repliche, per le quali però vi rimando a qualche articolo che io ho trovato interessante:
https://secure.codeproject.com/database/MergeReplication.asp
Attenzione alla gestione degli Identity!!!! Cosa che io avevo inizialmente sottovalutato: in due parole, ogni subscriber della replica deve avere assegnato un suo range di ID, altrimenti al momento della replica le chiavi vanno in conflitto. Per fare ciò dovete:

Per ulteriori approfondimenti vedete questo articolo MS:  Replicating Identity Columns

Infine dovrete configurare, tramite l’apposito wizard “Web Synchronization Wizard”, la parte server di sql 2005. Il tutto è guidato e semplice, occhio solo a non fare avanti e indietro le wiszard che a volte si impasta. Se vi da errore, è meglio chiuderlo e riaprirlo.
Su questo punto, io vi suggerisco di abilitare l’autenticazione al servizio, magari creando un’account apposito sul server: questo vi consente di limitare l’accesso alle repliche, che male non fa.

Spero che con queste info qualcuno si risparmi un po’ del suo tempo, per quanto mi riguarda è stato un bell’investimento, soprattutto per i problemi riscontrati. Per fortuna alla fine tutto funziona 😉