C# Process.start处的System.NullReferenceException异常

C# Process.start处的System.NullReferenceException异常,c#,.net,configuration-files,C#,.net,Configuration Files,我有一个使用Process.Start执行exe的应用程序。它适用于我测试过的所有.exe,除非.exe有一个配置文件,其中包含一个connectionstring,发生这种情况时,我会得到一个System.NullReferenceException。这是我的密码 要执行exe,请执行以下操作: string eucApp = @"C:\Temp\app.exe" startInfo = new ProcessStartInfo(eucApp); using (Process execProc

我有一个使用Process.Start执行exe的应用程序。它适用于我测试过的所有.exe,除非.exe有一个配置文件,其中包含一个connectionstring,发生这种情况时,我会得到一个System.NullReferenceException。这是我的密码

要执行exe,请执行以下操作:

string eucApp = @"C:\Temp\app.exe"
startInfo = new ProcessStartInfo(eucApp);
using (Process execProcess = Process.Start(startInfo))
{
    execProcess.WaitForExit();
}
然后exe启动,要做的第一件事就是用这个代码行获取连接字符串

strCadena = ConfigurationManager.ConnectionStrings("ConnectionString")
如果我用像这样的connectionstring替换它,它工作得很好

strCadena = "Data Source=HostName;Initial Catalog=MyDB;Integrated security=True"

我会删除配置文件并将其值放入.exe代码中,但问题是我有超过500个.exe使用配置文件,所以如果有人知道避免这种情况的方法,请告诉我

谢谢你的帮助。我解决了这个问题。不知怎的,.exe指向启动进程的应用程序的app.config。我将这个类添加到VB.Net中开发的.exe中

Imports System.Configuration
Imports System.Reflection
Public Class AppConfig
  Implements IDisposable
  Public Shared Function Change(ByVal path As String) As AppConfig

    Return New ChangeAppConfig(path)
  End Function
  Public Overridable Sub Dispose() Implements IDisposable.Dispose
  End Sub
  Private Class ChangeAppConfig
    Inherits AppConfig
    Private ReadOnly oldConfig As String = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString
    Private disposedValue As Boolean
    Public Sub New(ByVal path As String)
      AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path)
      ResetConfigMechanism()
    End Sub
    Public Overrides Sub Dispose()
      If (Not disposedValue) Then
        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", oldConfig)
        ResetConfigMechanism()
        disposedValue = True
      End If
      GC.SuppressFinalize(Me)
    End Sub
    Private Shared Sub ResetConfigMechanism()

      GetType(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic Or BindingFlags.Static).SetValue(Nothing, 0)
      GetType(ConfigurationManager).GetField("s_configSystem", BindingFlags.NonPublic Or BindingFlags.Static).SetValue(Nothing, Nothing)
      Dim assemblies() As Type = GetType(ConfigurationManager).Assembly.GetTypes()
      For Each assembly As Type In assemblies
        If (assembly.FullName = "System.Configuration.ClientConfigPaths") Then
          assembly.GetField("s_current", BindingFlags.NonPublic Or BindingFlags.Static).SetValue(Nothing, Nothing)
          Exit For
        End If
      Next
    End Sub
  End Class
End Class
我在程序开始时调用Change函数

AppConfig.Change(Application.StartupPath & "\app.exe.Config")

这样就需要使用正确的配置文件

您必须将工作文件夹设置为.exe所在的同一文件夹-在您的示例中为“c:\temp\”您好,谢谢您的回答@t3hn00b,但我仍然会收到相同的错误,假设您的连接字符串位于app.config文件中。该文件是否也与您的可执行文件一起位于工作文件夹中?您是否能够毫无例外地从中读取任何值,或者只是在读取连接字符串时?