关闭

C# CreateProcess的测试

发表于:2015-10-28 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赛提斯特    来源:51Testing软件测试网采编

  很奇怪的一个现象,在C#中使用Process来启动进程,启动文件名必须是系统指定的扩展名.EXE,而我使用原生的Win32API ::CreateProcess ()并没有这个限制,以后遇到类似的问题要注意了
  下面例子:com.aaa,com.exe都是同一个可执行文件,只是扩展名不一样
  [TestMethod()]
  public void Simple1111_Test()
  {
  var process = new System.Diagnostics.Process();
  process.StartInfo.FileName = @"e:\com.aaa";
  var bb = process.Start();
  }
  运行失败,但是下面的测试
  [TestMethod()]
  public void Simple1111_Test()
  {
  var process = new System.Diagnostics.Process();
  process.StartInfo.FileName = @"e:\com.exe";
  var bb = process.Start();
  }
  运行成功
  下面用原生的WIN32API测试Com.aaa
  STARTUPINFO si = { sizeof(si) };
  PROCESS_INFORMATION pi;
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = TRUE;
  BOOL bRet = ::CreateProcess (    TEXT("e:\\Com.aaa"),
  NULL,   NULL,     NULL,    FALSE,
  CREATE_NEW_CONSOLE,    NULL,
  NULL,    &si,    &pi);
  int error = GetLastError();
  这个又成功了
  说明内核没有检测执行文件的扩展名,而.Net库Process类做了检测
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号