0

So work is slow and i am an intern and am generally installing lots of programs on computer that have been reformatted or possibly are missing software. I Recently came across a pre-built code which search the registry for already installed programs only one problem is that i cannot get it to work. here is what i have. I really want to expand it over time and use a GUI and such along with customizing it. Allowing me to see what is missing and a form/gui where i can link buttons to installers. The error i am getting is

"Error 1 The name 'Installed' does not exist in the current context" I am right that i am some how missing a function to call Installed. I am new to C# and havent had a lot of in depth experience with it.


Form1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

    
        
        }

       
        private void button1_Click (object sender, EventArgs e)
        {
            MessageBox.Show(Installed());
        }
     
    }
    }

Class1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;

namespace WindowsFormsApplication2
{
    class Class1
    {


        /// <summary>
        /// Gets a list of installed software and, if known, the software's install path.
        /// </summary>
        /// <returns></returns>
        private string Installed()
        {
            //Declare the string to hold the list:
            string Software = null;

            //The registry key:
            string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey))
            {
                //Let's go through the registry keys and get the info we need:
                foreach (string skName in rk.GetSubKeyNames())
                {
                    using (RegistryKey sk = rk.OpenSubKey(skName))
                    {
                        try
                        {
                            //If the key has value, continue, if not, skip it:
                            if (!(sk.GetValue("DisplayName") == null))
                            {
                                //Is the install location known?
                                if (sk.GetValue("InstallLocation") == null)
                                    Software += sk.GetValue("DisplayName") + " - Install path not known\n"; //Nope, not here.
                                else
                                    Software += sk.GetValue("DisplayName") + " - " + sk.GetValue("InstallLocation") + "\n"; //Yes, here it is...
                            }
                        }
                        catch (Exception ex)
                        {
                            //No, that exception is not getting away... :P
                        }
                    }
                }
            }

            return Software;
        }

    }
}
2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by nmaillet
0

Installed() is a method contained within another class. In addition, it is marked as private. You could change the installed method to:

public static string Installed()

The static keyword allows the method to be accessed without creating a new Class1. Now, you can reference it by calling:

MessageBox.Show(Class1.Installed())

You need to explicitly state the class that the method is contained in, unless it is contained in the same class.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.