C#运行另一个程序并指定App.Config文件

问题描述:

我有一个测试程序,我在其中调用另一个程序(我们称之为主程序)System.Diagnostics。我遇到问题,指定测试程序正在使用哪个App.Config。它似乎总是默认使用主程序的app.config。有没有一种方法来指定使用哪个文件而无需更改主程序来使用程序参数?看到我的代码如下。C#运行另一个程序并指定App.Config文件

Process process = new Process(); 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.FileName = @"...\MainProgram.exe"; 
    process.StartInfo.CreateNoWindow = false; 
    process.StartInfo.WorkingDirectory = @"...\TestProgram\bin\Debug"; 
    process.Start(); 

我假设你可以复制你想使用的文件,以确保它是你需要的文件。

使用File.Copy来完成。

File.Copy(@"C:\yourCorrectFilePath\App.Config", @"...\TestProgram\bin\Debug\App.Config", true); 
    Process process = new Process(); 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.FileName = @"...\MainProgram.exe"; 
    process.StartInfo.CreateNoWindow = false; 
    process.StartInfo.WorkingDirectory = @"...\TestProgram\bin\Debug"; 
    process.Start(); 
+0

谢谢你,你的思想工作。我已将我的测试app.config复制到程序目录,将来可能会将其更改为将主程序的目录复制到临时目录中,而不是编辑主程序的app.config。 – waterguard

+1

请注意,这不适用于用户设置。它们存储在用户配置文件中的不同XML文件中。此外,编译的应用程序的配置文件不称为app.config,但匹配程序集名称+“exe.config”。所以上面的代码只有在相应修改时才有效。 –

没有办法在运行时指定App.config文件。 @ NicoRiff的答案是可行的,但你也可以用不同的路径存储可执行文件,这些路径可以通过程序设置成一个变量。

你可以开始在一个单独的应用程序域的程序和路径设置为在app.config形式有:

 AppDomainSetup setup = new AppDomainSetup 
        { 
         ShadowCopyFiles = "true", 
         LoaderOptimization = LoaderOptimization.MultiDomainHost, 
         ApplicationBase = "C:\ExamplePath", 
         PrivateBinPath = "C:\ExamplePath", 
         PrivateBinPathProbe = "C:\ExamplePath" 
        }; 

        var domain = AppDomain.CreateDomain("ExampleName", null, setup); 
        domain.SetData("APP_CONFIG_FILE", "C:\ExamplePath" + "\\app.config"); 

setup.ExecuteAssembly(@"c:\ExamplePath\MainProgram.exe");