public static void LaunchAppUnderProfiler(string testApp, string testScript, string output, bool isRejit, string args) { if (!BinaryRecompiled) { BinaryRecompiled = true; TargetAppCompiler.DeleteExistingBinary(PathUtils.GetAssetsPath()); TargetAppCompiler.ComplileCSharpTestCode(PathUtils.GetAssetsPath()); } DeleteOutputFileIfExist(output); // Ensure test results path exists Directory.CreateDirectory(PathUtils.GetTestResultsPath()); bool is32bitTest = Is32bitTest(testScript); string bitnessSuffix = is32bitTest ? "x86" : "x64"; // TODO: call this only for 64bit OS SetBitness(is32bitTest); System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.UseShellExecute = false; psi.EnvironmentVariables.Add("COR_ENABLE_PROFILING", "1"); psi.EnvironmentVariables.Add("COR_PROFILER", ProfilerGuid.ToString("B")); psi.EnvironmentVariables.Add("COR_PROFILER_PATH", Path.Combine(PathUtils.GetAssetsPath(), string.Format("MicrosoftInstrumentationEngine_{0}.dll", bitnessSuffix))); psi.EnvironmentVariables.Add("MicrosoftInstrumentationEngine_FileLog", "Dumps"); // Uncomment this line to debug tests //psi.EnvironmentVariables.Add("MicrosoftInstrumentationEngine_DebugWait", "1"); if (ThrowMessageBoxAtStartup) { psi.EnvironmentVariables.Add("MicrosoftInstrumentationEngine_MessageboxAtAttach", @"1"); } if (TestParameters.DisableMethodSignatureValidation) { psi.EnvironmentVariables.Add("MicrosoftInstrumentationEngine_DisableCodeSignatureValidation", @"1"); } psi.EnvironmentVariables.Add(TestOutputEnvName, PathUtils.GetAssetsPath()); psi.EnvironmentVariables.Add( is32bitTest? HostConfig32PathEnvName : HostConfig64PathEnvName, Path.Combine(PathUtils.GetAssetsPath(), string.Format("NaglerInstrumentationMethod_{0}.xml", bitnessSuffix))); string scriptPath = Path.Combine(PathUtils.GetTestScriptsPath(), testScript); psi.EnvironmentVariables.Add(TestScriptFileEnvName, scriptPath); string outputPath = Path.Combine(PathUtils.GetTestResultsPath(), output); psi.EnvironmentVariables.Add(TestOutputFileEnvName, outputPath); psi.EnvironmentVariables.Add(IsRejitEnvName, isRejit ? "True" : "False"); psi.FileName = Path.Combine(PathUtils.GetAssetsPath(), testApp); psi.Arguments = args; System.Diagnostics.Process testProcess = System.Diagnostics.Process.Start(psi); testProcess.WaitForExit(); Assert.AreEqual(0, testProcess.ExitCode, "Test application failed"); }