Process.Modules仅在进程启动后立即工作

时间:2015-01-04 16:43:19

标签: c# visual-studio-2010 process module

我想显示加载到指定进程中的所有模块。我使用了这段代码并且有效:

Process myProcess = new Process();
        myProcess.StartInfo.FileName = "";
        myProcess.StartInfo.WorkingDirectory = "";
        myProcess.Start();
        ProcessModule myProcessModule;
        ProcessModuleCollection myProcessModuleCollection = myProcess.Modules;
        for (int i = 0; i < myProcessModuleCollection.Count; i++)
        {
            myProcessModule = myProcessModuleCollection[i];
            MessageBox.Show(myProcessModule.ModuleName);
        }

但是我想在点击按钮后显示模块,所以我这样做了:

public Process myProcess;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Process myProcess = new Process();
        myProcess.StartInfo.FileName = "";
        myProcess.StartInfo.WorkingDirectory = "";
        myProcess.Start();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        ProcessModule myProcessModule;
        ProcessModuleCollection myProcessModuleCollection = myProcess.Modules;
        for (int i = 0; i < myProcessModuleCollection.Count; i++)
        {
            myProcessModule = myProcessModuleCollection[i];
            MessageBox.Show(myProcessModule.ModuleName);
        }
    }

但它会抛出一个错误&#34;对象引用未设置为对象的实例&#34;对于这一行:

ProcessModuleCollection myProcessModuleCollection = myProcess.Modules;

我在互联网上搜索了一个答案,尝试了我能想到的一切,但它只是赢了工作。我也搜索了我得到的错误,我发现该程序可能认为myProcess.Modules为null,但这对我也没有帮助。

1 个答案:

答案 0 :(得分:1)

myProcess中的

button1_Click是一个局部变量 您班级中的字段仍为null

您需要删除变量声明。