System.Diagnostics.Process UseShellExecute 到底做了什么?

2024-07-04

我有一个 MSBuild 任务,它执行(除其他外)对 xcopy 的调用。我发现,当我从批处理文件运行 MSBuild 任务时,对 xcopy 的调用可以正确执行,并且无法执行或生成任何输出,无法让我知道从另一个批处理文件调用同一个批处理文件时发生了什么具有 System.Diagnostics.Process 的 C# 应用程序。

这两个进程都以或多或少相同的结构启动:

waitProc.StartInfo.Arguments = "/C [executable]";
waitProc.StartInfo.FileName = "cmd.exe";
waitProc.StartInfo.UseShellExecute = false;

此外,通过将 xcopy 命令上的“UseShellExecute”从 false 更改为 true,我可以在两个用例中都成功,但是该命令在第三个用例中无法运行。第三个用例是我们的自动构建系统,它是直接调用 msbuild 的 Windows 服务。如果我们的构建机器出现故障,复制命令会无限期挂起,我相信这是因为 System.Diagnostics.Process 尝试显示一个窗口,而服务没有与之关联的 Windows 桌面会话,因此它们无法显示窗口。

我尝试过使用“CreateNoWindow”属性,并且尝试将“WindowStyle”设置为“ProcessWindowStyle.Hidden”,但这不会改变构建计算机上的行为。

综上所述,我真正想知道的是 UseShellExecute 属性到底做了什么,因为它的作用似乎比 MSDN 文档建议的要多得多。

Thanks.


ProcessStartInfo.UseShellExecute http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.useshellexecute.aspx告诉进程使用 Windows Shell 执行指定的应用程序。

如果没有这个设置,你只能直接执行一个EXE文件。通过设置此选项,您可以使用 Windows Shell,从而允许指定 .doc 文件并让关联的程序打开该文件等操作。

但是,使用 Windows Shell 需要有效的桌面上下文,这就是您的第三个用例失败的原因。

一般来说,使用cmd.exe除非您使用 Windows Shell,否则这是有问题的。您可能只想编写代码来直接处理“批处理”操作 - 即:使用System.IO命名空间 http://msdn.microsoft.com/en-us/library/system.io.aspx进行复印。这样就可以完全避免这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.Diagnostics.Process UseShellExecute 到底做了什么? 的相关文章

  • 如何在C语言中删除linux上的root权限?

    我想以非 root 用户身份分叉 执行和编程 同时父级保留 root 权限 伪代码 pid fork if pid 0 if RunAsUser ConvertStringToUserId John false stop if RunAsU
  • 哪个STL容器具有线程安全的插入过程?

    哪个STL容器具有线程安全的插入过程 我希望多个线程同时插入同一个容器中 欢迎除 STL 即 Boost 之外的任何实现 STL 容器不是线程安全的 如果您愿意的话 您必须通过自己的同步来强加这一点
  • 如何从我的应用程序在用户默认浏览器中启动 URL?

    如何在桌面应用程序中添加一个按钮 使用户的默认浏览器启动并显示应用程序逻辑提供的 URL Process Start http www google com
  • 如何在C#中隐藏文件?

    我想在c 中隐藏一个文件 我知道文件路径并且可以创建 FileInfo 对象 我怎样才能隐藏它 之前接受的答案 File SetAttributes path FileAttributes Hidden 将导致它可能丢失某些其他属性 因此您
  • 如何检测动态绘制图形的点击?

    我正在面板上绘制文件和文件夹名称列表 并试图集体讨论检测用户是否单击文件 文件夹名称以及何时单击文件 文件夹名称以及他们实际单击的文件或文件夹名称的最佳方法 以下是我迄今为止编写的方法 我的第一个想法是用透明控件搭载每段文本 并以这种方式动
  • Google 的“编码折线算法”的 C# 实现

    有谁有 Google 的简洁而强大的实现吗 编码折线算法 http code google com apis maps documentation utilities polylinealgorithm html in C 我本质上想要实现
  • 如何知道机器的堆栈在内存中是向上还是向下增长? (JAVA)

    我有一个 C 程序来检查机器堆栈在内存中是向上还是向下增长 事情是这样的 include
  • 当我将鼠标悬停在组合框项目上时引发事件

    当我将鼠标悬停在组合框项目上时 我无法找到要触发的事件 我正在使用 Windows 窗体来构建应用程序 我发现WPF有类似的东西 当我将鼠标悬停在组合框项目上时如何更改标签文本 https stackoverflow com questio
  • 如何使文本框的自动完成列表可编辑?

    我有一个包含很多内容的应用程序TextBox使用自动完成的控件 每个人都使用AutoCompleteMode CustomSource从关联的获取自动完成文本AutoCompleteStringCollection 每当用户在其中输入新值时
  • 收据在打印文档中有重叠文本

    我正在 POS 项目中创建打印收据并附上输出的图片 我的问题是描述 数量 价格 金额的重叠 如何在这段代码的下一行显示数量 价格和金额 e Graphics DrawString Description new Font trebuchet
  • OpenCV 图像处理——C++、C、Python

    我正在考虑在一个项目中尝试 OpenCV 并注意到它有 C C 和 Python 我正在尝试确定是否应该使用 C C 还是 Python 并且希望使用具有最佳 OpenCV 支持的任何语言 仅从查看各种文档的索引页来看 C 绑定可能比其他绑
  • 如何将 char 指针转换为 int 指针

    我想投射一个指针pc它将 char 指向一个点pi它指向 int char pc int pi pi int pc compiler complaint about old style cast pi static cast
  • 安全地抛出在另一个线程上创建的异常 C#

    我想在线程A中捕获异常 然后将异常对象传递给线程B 并从线程B中抛出它 这样安全吗 Thread A try Code that throws exceptions catch Exception e sendToOtherThread e
  • LINQ to SQL 未映射的属性

    是否可以在设计器中添加自定义属性并且不将其绑定到列 我摆弄了一些设置 决定用该属性创建一个部分类 有没有办法在 ORM 设计器中显示这个字段 LINQ to SQL 设计器正在维护映射 未映射的属性需要放入单独的分部类中
  • 如何通过参数包传递引用?

    我有以下代码 include
  • Qt:如何处理用户按下“X”(关闭)按钮的事件?

    在 Qt 中 与用户单击窗口框架的 X 关闭 按钮 即此按钮 事件相对应的插槽是什么 如果没有这个插槽 在用户按下关闭按钮后是否有其他方法来触发功能 如果你有一个QMainWindow你可以覆盖closeEvent method inclu
  • 我是否需要显式关闭并处置 SQLConnection?

    SqlDataReader rdr null con new SqlConnection objUtilityDAL ConnectionString using SqlCommand cmd con CreateCommand try i
  • GO 语句破坏了 .NET 中的 SQL 执行

    我有一个非常简单的 C 命令 shell 应用程序 它执行 SQL Server 生成的 SQL 脚本来编写模式和数据脚本 它在 GO 声明中爆炸了 错误信息 GO 附近的语法不正确 这是完整的 sql 脚本 Object Table gy
  • 在头文件 (.h) 中声明构造函数然后在类文件 (.cpp) 中定义 C++ 的语法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果有人可以解决这个问题 我将不胜感
  • 如何等待进程及其所有子进程退出?

    是否有一个等待方法 当目标进程及其所有子进程退出时会返回 看来 Process WaitForExit 只会等待目标进程 net 中有一个错误会给出您所追求的行为 WaitForExit 如果您异步读取输出 将等待所有子进程 p Start

随机推荐

  • 将切换按钮扩展到父容器宽度

    有什么办法可以动态地将切换按钮扩展到父容器宽度 无需硬编码任何内容 我找到了一个使用上下文 MediaQuery 的答案 该答案仅适用于全屏宽度 我还尝试将按钮包装在扩展小部件中 但这会引发错误 Container width 150 0
  • nextjs 11.1 和 typescript 发生 React-markdown 导入错误

    这是一个 next js SSG 项目 但是npm run dev我尝试时遇到以下错误import react markdown 我无法通过这一步来测试next export 我知道react markdown是一个esm包 但我不清楚如何
  • 将重置和基础相结合的功效,而不是相互构建

    最近 我开始将重置和基础组合成一种邪恶的优化流线型大杂烩 我发现这是一种真正的享受 并且想知道这是否是常见的做法 我的猜测是 不 和 是 也就是说 我的印象是 有些程序员对重置感到恼火 喜欢从头开始做所有事情 其他人喜欢基线的便利性 但他们
  • Airflow Scheduler 内存不足问题

    我们正在试验 Apache Airflow 版本 1 10rc2 使用 python 2 7 并将其部署到 kubernetes webserver 和调度程序到不同的 pod 数据库也使用云 sql 但我们一直面临调度程序的内存不足问题荚
  • Spring-security - AccessDecisionVoter-impl 不会被调用

    我正在尝试创建自定义 AccessDecisionVoter 并在调用它时将其停止在调试中 我在每个方法中都设置了断点 但没有任何反应 spring security xml
  • Cckeditor 字符限制与 charcount 插件

    我怎么能够prevent用户输入新字符在最大字符之后已达到限制 Ckeditor charcount 插件只是向我显示剩余的字符 我希望它停在 0 处 但它会减去整数 这是我的 html 代码
  • yield return new WaitForSeconds(2) 销毁函数

    我决定创建一个类似记忆的小游戏 学习用unity3d进行游戏开发 游戏应在玩家点击卡片后等待 2 秒 然后再将卡片翻转回来 The yield return new WaitForSeconds 2 语句对此应该是完美的 但它的作用是不执行
  • AjaxToolkit for 3.5 不工作

    我正在尝试使用从下载的 ajaxtool 套件here http ajaxcontroltoolkit codeplex com releases view 43475对于颜色选择器 当我尝试在我的任何页面上使用它时 它会显示一个错误 Th
  • SqlCommand 到 T-SQL

    有没有办法将 SqlCommand 对象转换为实际的 T SQL 命令 然后发送到 SQL Server 我不这么认为 参数和查询文本分别发送到SQL Server SQL Server相应地处理它们 您可以从 SqlCommand Com
  • 如何将编码器作为参数传递给数据帧的 as 方法

    我想通过使用不同的案例类将 dataFrame 转换为 dataSet 现在 我的代码如下所示 case Class Views views Double case Class Clicks clicks Double def conver
  • ICMP 套接字(Linux)

    IP协议下可以使用ICMP套接字吗 也许是这样的 socket PF INET
  • storageFolder.CreateFileAsync 期间出现 UnauthorizedAccessException

    我有下面的代码 Point to c users yancheng documents visual studio 2012 Projects App5 App5 bin x86 Debug AppX StorageFolder stora
  • pandas 预期第 153 行有 10 个字段,看到 11 个字段,如何再添加一列

    我有一个 info txt 文件 它看起来像这样 B 19960331 00100000 00000000000000 00000000000000 00000000000000 00000000 00000000000000 000000
  • 配置 argparse 以接受带引号的参数

    我正在编写一个程序 除其他外 它允许用户通过参数指定要加载的模块 然后用于执行操作 我试图建立一种方法来轻松地将参数传递到这个内部模块 并且我试图使用 ArgParse 的action append 让它构建一个参数列表 然后我将通过它 这
  • 如何将 SQL 转储导入表而不覆盖重复字段

    如何将 MySQL 转储文件导入数据库而不覆盖具有相同值的记录 这里是link http dev mysql com doc refman 5 0 en mysqlimport html到手册 您可以指定是否替换现有记录 replace r
  • 如何在MongoDB聚合中添加自增字段?

    我想添加一个附加的键数字 其中包含自动递增数字的值 我怎样才能实现这个目标 下面是查询 不进行unwind和group是否可以达到这个结果 match iContestId 5e4118161a7b5765ee9b40ef project
  • Flask:如何从模板目录下提供静态文件?

    我使用 Flask 并想要更改我的资产文件夹目录 这是我的文件夹结构 python static js img font css templates default css js img venv app py 我想移动静态文件夹下的所有文
  • Python下载具有特定文件名的youtube

    我正在尝试下载 youtube 视频pytube这边走 from pytube import YouTube YouTube http youtube com watch v 9bZkp7q19f0 streams first downlo
  • Vb.Net动作委托问题?

    我是 vb net 新手 这个问题可能很新手 之前已经回答过 但我找不到 我正在尝试 lambda 功能并在这里受到打击 Private Function HigerOrderTest highFunction as Func Of Int
  • System.Diagnostics.Process UseShellExecute 到底做了什么?

    我有一个 MSBuild 任务 它执行 除其他外 对 xcopy 的调用 我发现 当我从批处理文件运行 MSBuild 任务时 对 xcopy 的调用可以正确执行 并且无法执行或生成任何输出 无法让我知道从另一个批处理文件调用同一个批处理文