2016-12-27 6 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を編集する代わりに、メインプログラムのディレクトリをtempディレクトリにコピーするように変更することがあります。 – waterguard

+1

これはユーザー設定では機能しません。これらは、ユーザープロファイル内の別のXMLファイルに格納されています。また、configファイルは、コンパイルされたアプリケーションの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"); 
関連する問題