Problème application après publication

Signaler
Messages postés
177
Date d'inscription
lundi 11 août 2003
Statut
Membre
Dernière intervention
21 avril 2010
-
Messages postés
177
Date d'inscription
lundi 11 août 2003
Statut
Membre
Dernière intervention
21 avril 2010
-
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

Messages postés
48
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
23 mars 2007
1
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
Messages postés
177
Date d'inscription
lundi 11 août 2003
Statut
Membre
Dernière intervention
21 avril 2010

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";
           
        }
Messages postés
48
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
23 mars 2007
1
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
Messages postés
177
Date d'inscription
lundi 11 août 2003
Statut
Membre
Dernière intervention
21 avril 2010

Ok, j'avais pas pensé a sa ! Merci de ton aide, j'essayerai sa demain, je te remercie encore ;)