Solved

Console app and microsoft.win32

Posted on 2006-11-09
13
277 Views
Last Modified: 2010-04-16
All,

I have a simple console application done in c#, built in vs.net 2003.  I have included microsoft.win32 as i'm hitting the registry.  I can run the app locally, but when I run it on a basic pc, it wont' work.  If I comment out the Microsoft.win32 and the reg calls, it works fine.

Any ideas how to solve.

Thanks in advance,
Kris



0
Comment
Question by:kdunnett
  • 6
  • 5
  • 2
13 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17908935
What happens when you try to run it ? Does it throw any exceptions ?
0
 
LVL 11

Expert Comment

by:Expert1701
ID: 17908976
> I can run the app locally, but when I run it on a basic pc...

  Is the "basic pc" accessing the application from the network?  If so, can you try copying the application to the (C:) drive of the basic pc, and try again?
0
 

Author Comment

by:kdunnett
ID: 17909013
Window pops up:
common language runtime debugging services
application has generated an exception that could not be handled.
process id = 0x6f4(1780), thread id=0x400(1024)

On the command line:
Unhandled Exception: System.NullReferenceException: Object reference not set to
an instance of an object.
   at Application.class1.Main(String[] args)
0
 

Author Comment

by:kdunnett
ID: 17909021
The app is running locally on the test pc.  
0
 
LVL 11

Expert Comment

by:Expert1701
ID: 17909031
What operating systems are the two PCs running?
0
 

Author Comment

by:kdunnett
ID: 17909050
win 2000 on the test pc.  win xp on the development machine (the that works).

But I just tried the exe on another test pc with win xp, and that didn't work.

0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 
LVL 11

Expert Comment

by:Expert1701
ID: 17909073
Can you verify that your Registry calls would actually successful on another machine (i.e. check the registry on the test machine to make sure the keys you are looking up actually exist, or if you are making modifications then make sure you have the appropriate permissions)?

If you are still stuck, a post with some more code from your Main method would be helpful.
0
 

Author Comment

by:kdunnett
ID: 17909082
I'm thinking that it has something to do with .net framework and how on the test pc's its quite limited.

Is there a dll out there that contains the same methods and such thats in the microsoft.win32 namespace?
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17909093
It may be a permissions issue that your code doesn't currently handle rather than there being something missing. Are you running the app under an Administrator account on all the machines ?
0
 

Author Comment

by:kdunnett
ID: 17909111
I"m logging in as the admin on the test pc's...  so permissions are valid.

yes, registry folder exists.

Here's the whole section that doesn't work...  you should be able to compile with no issues.  Just confirm you have the path first.  and just does a read, no modification at all.
________________________________


using System;
using Microsoft.Win32;

namespace LDAPEditRegistry
{
      /// <summary>
      /// Summary description for Class1.
      /// </summary>
      class Class1
      {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                  try
                  {
                        RegistryKey CurrentUser = Registry.CurrentUser;
                        CurrentUser = CurrentUser.OpenSubKey("Software\\Microsoft\\Windows Nt\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Outlook",false);
            
                        foreach(string KeyName in CurrentUser.GetSubKeyNames())
                        {
                              Console.WriteLine(KeyName);
                  
                              RegistryKey OurKey = Registry.CurrentUser;
                              OurKey = OurKey.OpenSubKey("Software\\Microsoft\\Windows Nt\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Outlook\\"+ KeyName,false);

                              foreach(string valuename in OurKey.GetValueNames())
                              {
                                    if(valuename == "001e6608")
                                    {
                                          Console.WriteLine("\t\tValueName: "+ OurKey.GetValue(valuename).ToString());

                                          if(OurKey.GetValue(valuename).ToString() == "100")
                                          {
                                                Console.WriteLine("\t\tFOUND THE '100' VALUE");
                                          }
                                    }            
                              }
                        }
                  }
                  catch(Exception ex)
                  {
                        throw ex;
                  }
                  finally
                  {
                  }
            }
      }
}
0
 
LVL 11

Accepted Solution

by:
Expert1701 earned 500 total points
ID: 17909185
Excellent example, kdunnett; it failed on my system (Windows XP Professional, Office 2003 Professional).

Please try the following adjustment:

  CurrentUser = CurrentUser.OpenSubKey("Software\\Microsoft\\Windows Nt\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Outlook", false);

  if (CurrentUser == null)
  {
    Console.WriteLine("Key does not exist!");
  }
  else
    foreach (string KeyName in CurrentUser.GetSubKeyNames())
    ...

Note that if you remove your try...catch block while testing, the exception message should provide more detail.
0
 
LVL 11

Expert Comment

by:Expert1701
ID: 17909404
Note that, you will also need to check that OurKey is not null before proceeding to call OurKey.GetValueNames.
0
 

Author Comment

by:kdunnett
ID: 17909411
Expert1701,

Thanks.  I found out that the path in the registry (depending on computer) changes for the last entry in the path.

I just wasn't looking far enough down in the tree.

Thanks for your help!
Kris
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now