Problème application après publication

T103 Messages postés 177 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 23 mars 2007 à 17:42
T103 Messages postés 177 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 23 mars 2007 à 20:34
Voila j'ai développé un programme sur mon pc, je l'ai ensuite publié pour la tester sur le pc de mon frère et de ma mère mais helas, quand je lance l'application j'ai ce message d'erreur qui apparait juste avant :

************** Texte de l'exception **************
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à GestionProcess.Form1.initRegistre()
   à GestionProcess.Form1.Form1_Load(Object sender, EventArgs e)
   à System.Windows.Forms.Form.OnLoad(EventArgs e)
   à System.Windows.Forms.Form.OnCreateControl()
   à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   à System.Windows.Forms.Control.CreateControl()
   à System.Windows.Forms.Control.WmShowWindow(Message& m)
   à System.Windows.Forms.Control.WndProc(Message& m)
   à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   à System.Windows.Forms.ContainerControl.WndProc(Message& m)
   à System.Windows.Forms.Form.WmShowWindow(Message& m)
   à System.Windows.Forms.Form.WndProc(Message& m)
   à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Comment se fait il que j'ai cette erreur sachant que sur mon pc sa marche ??

Merci pour vos aides

4 réponses

PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
23 mars 2007 à 17:58
Salut,

D'après ton Call Stack, le problème est dans ta fonction initRegistre() que tu fais appel dans ton Form1_Load()

Il y a un objet que tu utilise dans ta fonction initRegistre qui a une valeur "null".

Avoir le code de ta fonction initRegistrer() pourait nous fournir quelque renseignement sur ton erreur.

Piter TheWood
0
T103 Messages postés 177 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 21 avril 2010
23 mars 2007 à 18:03
Voici le code de ma fonction initRegistre :

public void initRegistre()
        {

            nUDCacheIco.Minimum = 0;
            nUDCacheIco.Maximum = 10000;
            nUDTimeout.Minimum = 500;
            nUDTimeout.Maximum = 6000;

            RegistryKey cle = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Dfrg\\BootOptimizeFunction", true);
            RegistryKey cleIconeDll = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", true);
            RegistryKey cleTimeout = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
            RegistryKey cleNoyauxCache = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management",true);

            string val = cle.GetValue("Enable").ToString();
            switch (val)
            {
                case "Y":
                    rbtnActDefrag.Checked = true;
                    break;
                case "N":
                    rdbtnDesactDefrag.Checked = true;
                    break;
            }
            //creer la clé si existe pas
            lblCachActuIco.Text = "Cache actuel " + cleIconeDll.GetValue("Max Cached Icons").ToString() + " Ko";
            nUDCacheIco.Value = Int32.Parse(cleIconeDll.GetValue("Max Cached Icons").ToString());

            //creer la clé si existe pas
            if (Int32.Parse(cleIconeDll.GetValue("AlwaysUnloadDll").ToString()) == 1)
                rdbtnDechDll.Checked = true;
            else
                rdbtnChargDll.Checked = false;

            //creer la clé si existe pas
            lblTimeout.Text = "Valeur actuel : " + cleTimeout.GetValue("HungAppTimeOut").ToString() + " ms";
            nUDTimeout.Value = Int32.Parse(cleTimeout.GetValue("HungAppTimeOut").ToString());

            if (Int32.Parse(cleNoyauxCache.GetValue("DisablePagingExecutive").ToString()) == 1)
                rdbtnActNoyaux.Checked = true;
            else
                rdbtnDesacNoyaux.Checked = false;

            if (Int32.Parse(cleNoyauxCache.GetValue("LargeSystemCache").ToString()) == 1)
                rdbtnActCacheD.Checked = true;
            else
                rdbtnDesactCacheDD.Checked = false;

            lblCacheL2.Text = "Taille actuel " + cleNoyauxCache.GetValue("SecondLevelDataCache").ToString() + " Ko";
           
        }
0
PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
23 mars 2007 à 19:25
Je crois que le problème c'est que les clefs que tu essayes de lire sur l'ordinateur de ton frère ne sont pas créer mais que sur ton ordinateur ils le sont.

Je te conseille d'effectuer une vérification si les clefs existe,
Utilise la fonction GetValueNames() qui retroune un tableau de chaîne. 
ex: string[] tblClefDisponible = cleIconeDll.GetValueNames();

Et lorsque tu effectues une lecture dans à l'aide de la fonction GetValue(), transmet lui une valeur par défaut.
ex: object objClef = cleIconeDll.GetValue("AlwaysUnloadDll", 0);
int ValeurClef = Convert.ToInt32(obtClef);
if (ValeurClef != 0)
{
    ...
}

Et tu pourrais (si tu désire) effectuer une réorganisation du code
Par exemple :

// Clef  "Software\\Microsoft\\Dfrg\\BootOptimizeFunction"
// vérification de l'existance des clefs
// obtenir la valeur
// traiter le résultat

// Clef "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
...

Dernier petit conseille c'est d'utiliser des try catch pour s'asssurer que l'opération s'effectue sans problème
ex:
try
{
    object objClef = cleIconeDll.GetValue("AlwaysUnloadDll", 0);

    int ValeurClef = Convert.ToInt32(obtClef);

    if (ValeurClef != 0)

    {

        ...

    }

}
catch (Exception ex)
{
    // Opération à faire en cas d'erreur
    ...
}

J'espère que cela va d'aider

bonne programation

Piter TheWood
0
T103 Messages postés 177 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 21 avril 2010
23 mars 2007 à 20:34
Ok, j'avais pas pensé a sa ! Merci de ton aide, j'essayerai sa demain, je te remercie encore ;)
0
Rejoignez-nous