2016-12-27 59 views
0

我有一個測試程序,我在其中調用另一個程序(我們稱之爲主程序)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(); 

回答

0

我假設你可以複製你想使用的文件,以確保它是你需要的文件。

使用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」。所以上面的代碼只有在相應修改時纔有效。 –

0

沒有辦法在運行時指定App.config文件。 @ NicoRiff的答案是可行的,但你也可以用不同的路徑存儲可執行文件,這些路徑可以通過程序設置成一個變量。

1

你可以開始在一個單獨的應用程序域的程序和路徑設置爲在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"); 
相關問題