问题标签 [processstartinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5841 浏览

.net - ClickOnce 应用程序不会通过 Process.Start("x.abc") 启动,其中 *.abc 与 ClickOnce 应用程序关联

我已经成功开发并部署了一个 ClickOnce 应用程序,它注册了一个关联的文件扩展名,例如*.abc. 当我单击一个名为的文件x.abcx.abc从命令提示符键入时,ClickOnce 应用程序将启动,我可以通过专用 API 检索该文件。我还可以使用以下代码以编程方式启动应用程序:

在我的 Windows Vista 64 位机器上一切正常。

但是,如果我尝试在 Windows 7(也是 64 位)上做同样的事情,我会遇到一个非常奇怪的问题。这是我观察到的:

  1. x.abc通过在资源管理器中双击它来手动启动。
  2. x.abc从命令提示符手动启动有效。
  3. Process.Start("x.abc")不启动应用程序;但是,返回的进程对象显示没有错误,并且 ClickOnce 应用程序以某种方式立即退出。但即使是Trace在 ClickOnce 应用程序最开始的时候,也永远无法到达。
  4. 更奇怪的是,包含单行Process.Start("x.bat")的文件也不会启动 ClickOnce 应用程序!同样从 Explorer 作品开始(当然)。x.batx.abcx.bat

尝试分析发生的情况ProcMon并不是很有帮助,因为在我看来,启动应用程序的 ClickOnce 过程很难遵循。我观察rundll32开始工作,但没有任何失败的证据。

正在执行的程序Process.Start是一个完全信任的控制台应用程序,没有什么花哨的。

我看不出在 Windows 7 上如何处理 ClickOnce 应用程序方面发生了什么变化,以及为什么Process.Start不与从资源管理器启动文件完全相同。值得一提的是,使用更高级版本的Start方法 withProcessStartInfo和设置UseShellExecutetotrue也无济于事。

从开始cmd然后Process.Start尝试启动x.abc显示完全相同的问题。如果我将环境设置与cmd手动启动进行比较,我会看到ProgramFiles定义方式的差异(第一个指向C:\Program Files (x86)而第二个指向C:\Program Files)。从我的 .NET 应用程序启动的应用程序在 32 位仿真层 (SysWoW64) 上启动。

我能够x.abc通过启动 32 位版本的命令提示符(即%windir%\SysWoW64\cmd.exe)然后x.abc在提示符处键入来重现启动失败。我还发现了一个丑陋的解决方法,即通过启动%windir%\Sysnative\cmd.exe /C x.abc而不是x.abc.

但我宁愿使用一种干净的方式来做这件事(或者让 Microsoft 代表告诉我这确实是 Windows 7 和/或 ClickOncce 的问题,并且很快就会修复)。

0 投票
3 回答
8800 浏览

process - WorkingDirectory 的 System.Diagnostics.Process 问题

我正在使用第三方软件工具(命令行工具)将 PDF 文件合并在一起。我尝试使用 C#System.Diagnostics.Process来运行可执行文件,但根据参数设置,我遇到了一些错误。

  • 如果我得到 UseShellExecute = trueRedirectStandardOutput = true
    • Process 对象必须将UseShellExecute属性设置为false才能重定向 IO 流。
  • 如果我得到 UseShellExecute = trueRedirectStandardOutput = false
    • 该系统找不到指定的文件
  • 如果我得到 useShellExecute = falseRedirectStandardOutput = true
    • 该系统找不到指定的文件
  • 如果我得到 UseShellExecute = falseRedirectStandardOutput = false
    • 该系统找不到指定的文件

正在运行的代码如下:

有人可以帮我解决这个问题吗?

0 投票
3 回答
16364 浏览

c# - 如何使用 ProcessStartInfo 运行批处理文件?

但它不起作用 - 意味着 java 代码没有被执行。尽管在 Windows 资源管理器中单击或在命令行中运行时批处理文件运行良好..

由于当批处理文件是单个 DOS 命令时这可以正常工作,所以我认为这与 Java 代码需要大约 20 分钟才能运行的事实有关。我正在使用以下代码

我究竟做错了什么?

0 投票
1 回答
1087 浏览

c# - 根据参数,以编程方式启动 CLI 应用程序不起作用

我尝试plink.exe从 C# 应用程序启动(PuTTY Link,PuTTY 的命令行实用程序/版本)以建立 SSH 反向隧道,但是一旦我传递了正确的参数,它就不再起作用

这意味着什么?以下按预期工作:它打开一个命令行窗口,显示我忘记传递-pw参数退出的密码,并显示提示。我知道它有论据,因为它特别要求我没有提供的一件事。

我尝试plink.exe直接调用而不是直接调用相同的想法cmd.exe /k,但窗口立即关闭,这对于寻找错误来说是不幸的。

但是当我在参数中传递密码时,plink.exe显示程序帮助(显示可用参数)并退出:

没有迹象表明缺少参数。cmd /k和变体都plink.exe不起作用(后者立即关闭,因此没有关于不同行为的信息)。

当我使用相同参数从 Windows 7 开始菜单启动器启动应用程序时,它会打开一个cmd.exe窗口并根据请求建立连接。

怎么了?有没有办法plink.exe注意到它没有在真正的外壳中运行?如果是,我该如何规避它,就像“开始”菜单“提示”一样?

我希望这个问题在 SO 上是正确的,因为它虽然专门针对单个应用程序,但围绕着以编程方式成功启动它。

0 投票
2 回答
1874 浏览

c# - C# 中的交互式控制台 I/O 包装器/拦截器 - 有什么问题?

周末,我试图通过重新混合我在 SO 和其他站点中找到的几个代码示例,在 C# 中组合一个交互式控制台拦截器/包装器。

就我现在所拥有的而言,我无法从控制台可靠地读取数据。任何快速指针?

我想要完成什么?这是一个小型用例。假设我有两个文本框。

0 投票
4 回答
22056 浏览

c# - C# - 启动不可见进程(CreateNoWindow 和 WindowStyle 不起作用?)

我有 2 个在 .NET 中创建的程序 (.exe)。我们称他们为 Master 和 Worker。Master 启动 1 个或多个 Worker。Worker不会与用户交互,但它是一个 WinForms 应用程序,它接收命令并根据从 Master 接收到的命令运行 WinForms 组件。

我希望 Worker 应用程序完全隐藏运行(当然除了显示在任务管理器中)。我认为我可以使用StartInfo.CreateNoWindowStartInfo.WindowStyle属性来完成此操作,但我仍然在表单中看到 Client.exe 窗口和组件。但是,它不会显示在任务栏中。

我需要怎么做才能让 Client.exe 运行,但不显示?ㅤㅤㅤㅤㅤ</p>

0 投票
1 回答
2409 浏览

.net - 同步启动进程,并“流式传输”输出

我正在考虑尝试从 F# 启动一个进程,等到它完成,但也要逐步读取它的输出。

这是正确/最好的方法吗?(就我而言,我正在尝试执行 git 命令,但这与问题无关)

我不明白 proc.Start() 如何返回一个布尔值,并且足够异步,让我可以逐步获得输出。

不幸的是,我目前没有足够大的存储库 - 或足够慢的机器,无法判断事情发生的顺序......

更新

我尝试了布赖恩的建议,它确实有效。

我的问题有点含糊。我的误解是我认为 Process.Start() 返回了整个过程的成功,而不仅仅是“开始”,因此我看不出它是如何工作的。

0 投票
1 回答
409 浏览

.net - git->Process->git 往返文本编码

我正在尝试编写一个实用程序来将代码从我们的自定义源代码管理迁移到 git。

旧系统中的“提交”消息被增量添加到项目路径中的文本文件中,所以我使用 git 将这些文件从一个版本差异到下一个版本,然后使用该差异作为提交消息。

不出所料,我在口音方面遇到了麻烦。

测试字符串是:éèàçüûöôëê

  1. 源文本文件(记事本告诉我)在“ANSI”中。
  2. 如果我在 msysgit 中做一个差异,我会看到这个<E9><E8><E0><E7><FC><FB><F6><F4><EB><EA>
  3. 当我使用相同的 diff 命令运行对 git 的 Process 调用时(请参阅问题),我得到:
    1. ÚÞÓþ³¹÷¶ÙÛ
    2. ����������StandardOutputEncoding = Encoding.UTF8根据这个问题。
    3. éèàçüûöôëêStandardOutputEncoding = Encoding.Default

到目前为止,一切都很好,但是如果我éèàçüûöôëê作为提交消息发回,git 会告诉我Warning: commit message does not conform to UTF-8.

关于如何使它工作的任何指示?这个问题也谈到了在 StandardInput 上设置编码,但我的提交消息在参数中,而不是输入的一部分。

(Git 还说我可以设置 config 变量i18n.commitencoding,但如果可以的话,我宁愿尊重 git 格式)

0 投票
3 回答
18044 浏览

c# - 提升权限不适用于 UseShellExecute=false

我想启动一个具有提升权限但具有隐藏窗口的子进程(实际上是相同的控制台应用程序)。

我接下来做:

这有效:

但是UseShellExecute = true创建一个新窗口,我也无法重定向输出。

所以当我下一步做的时候:

这不会提升权限,并且上面的代码返回 false。为什么??

0 投票
4 回答
4005 浏览

c# - C# - 以使用空白密码的用户身份运行新进程

我有一个从主应用程序生成的子进程,需要在 Windows 7 机器上作为另一个本地用户运行。我宁愿不在该用户帐户上设置密码,但似乎使用模拟创建新进程不允许使用空白密码或任何类型的空值。有谁知道这是否可能?

下面是我尝试传递一个空白字符:

编辑:我收到的错误消息

Logon failure: user account restriction. Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced