问题标签 [shellexecute]

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 投票
1 回答
1534 浏览

c++ - 系统范围的 ShellExecute 挂钩?

有什么方法可以使用 C++ 安装系统范围的 ShellExecute 挂钩,而无需将挂钩模块注入每个活动进程。我使用的是 Windows 7。我这样做的目的是因为,我希望能够在使用 ShellExecute 使用默认浏览器打开链接时选择在哪个浏览器中打开链接,如下所示:

0 投票
2 回答
391 浏览

python - 如何从 Python 执行 VS2008 命令并获取其输出?

我想跑

使用 Visual Studio 2008 命令工具。它位于:"c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"并且启动的命令是:%comspec% /k ""c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86

我想以某种方式将“tf changeset 12345”附加到它并将其保存到字符串中,而无需先将其重定向到文件。我注意到,当我简单地从命令行调用它时,我会在输入以下内容时获得 GUI:

当我这样做时,我得到了文本输出:

我不想在文件系统上创建文件,但希望只是以“Pythonic 方式”读取它。

我看过 os.system()、子进程的简短示例,但它们似乎都没有说明如何做我想做的事情:

  1. 从特定目录运行进程(最好不使用 chdir)
  2. 执行包含环境变量 + 自定义文本的命令。
  3. 重定向输出而不创建临时文件。

希望你能帮助我接近我想要的。如果您在 VS2008 或其他一些 Windows 程序上测试该解决方案,将会有所帮助。

谢谢!

0 投票
3 回答
3189 浏览

c++ - 以标准用户身份打开默认浏览器 (C++)

我目前正在使用 ShellExecute "open" 在用户浏览器中打开 URL,但在 Win7 和 Vista 中遇到了一些麻烦,因为程序作为服务运行提升。

当 ShellExecute 打开浏览器时,它似乎读取的是“本地管理员”配置文件而不是用户的配置文件。例如,如果使用键盘的用户将 Firefox 作为其默认浏览器,它可能会打开 IE(这是管理员的默认浏览器)。

我知道“runas”动词可以用来提升,但是你怎么做呢?有没有办法通过服务在标准用户桌面上的默认浏览器中打开 URL?

0 投票
2 回答
18149 浏览

winapi - 从非交互式服务 (win32/.net/powershell) 启动 UAC 提升进程

我正在使用第三方 Windows 服务,该服务通过使用 CreateProcessAsUser() 运行脚本和可执行文件来处理一些自动化任务。由于 UAC 以及通过 API 处理 LUA 提升的方式,我在 Windows Server 2008 上遇到了问题。

该服务作为 LocalSystem 运行,并且没有启用“与桌面交互”。这些进程作为管理员组中的用户运行,但不是管理员帐户(不受许多 UAC 限制)。所有 UAC 的默认设置都已到位。

我可以将任意命令或 powershell 代码传递给服务,但我似乎无法“突破”由服务启动的非提升、非交互式进程。

问题的症结似乎是启动提升进程的唯一(公共)API 选项是带有“runas”动词的 ShellExecute(),但据我所知,不能从非交互式调用服务,否则您会收到诸如“此操作需要交互式窗口站”之类的错误。

我发现的唯一解决方法在这里提到: http ://www.eggheadcafe.com/software/aspnet/29620442/how-to-proper-use-sendinp.aspx

在 Vista 中,官方记录的提升进程的方法是仅使用 shell API ShellExecute(Ex)(不是 CreateProcess 或 CreateProcessAsUser)。所以你的应用程序必须调用 ShellExecute(Ex) 来启动一个提升到调用 SendInput 的助手。此外,由于 Session 0 隔离,服务只能使用 CreateProcessAsUser 或 CreateProcessWithLogonW(不能使用 ShellExecute(Ex))来指定交互式桌面。

..我认为没有直接的方法可以从 Windows 服务中生成提升的进程。我们只能首先使用 CreateProcessAsUser 或 CreateProcessWithLogonW 在用户会话(交互式桌面)中生成一个非提升的进程。然后在非提升的进程中,它可以使用 ShellExecute(Ex) 为实际任务生成提升的进程。

要从 .net/powershell 代码执行此操作,看起来我必须做一些复杂的 P/Invoke 操作才能调用 CreateProcessAsUser 或 CreateProcessWithLogonW,因为 .Net System.Diagnostics.ProcessStartInfo 没有我可以使用的 lpDesktop 等价物设置为“winsta0\default”。而且我不清楚 LocalSystem 是否甚至有权调用 CreateProcessAsUser 或 CreateProcessWithLogonW。

我还查看了 http://blogs.msdn.com/alejacma/archive/2007/12/20/how-to-call-createprocesswithlogonw-createprocessasuser-in-net.aspxProcess.Start 与 UAC 不同的凭据

基于所有这些,我得出的结论是,没有直接的方法可以做到这一点。我错过了什么吗?这似乎真的不应该那么难。感觉就像 UAC 从未设计用于处理非交互式用例。

如果有任何 Microsoft 人员最终阅读了这篇文章,我注意到 ShellExecute 在内部处理提升的方式是调用应用程序信息服务 (AIS)。为什么不能通过某些 Win32 或 .NET API 对 AIS 进行相同的调用? http://msdn.microsoft.com/en-us/library/bb756945.aspx

抱歉,运行时间有点长。感谢您的任何想法。

0 投票
3 回答
2238 浏览

c++ - 链接多个 ShellExecute 调用

考虑以下代码及其可执行文件 - runner.exe

这两个批处理文件都做了它们应该做的事情,即运行 notepad.exe 并运行 notepad.exe 并告诉它尝试打开 test.txt:

现在,考虑这个批处理文件:

这个应该运行 runner.exe 并将 notepad.exe 作为其命令行参数之一发送,不是吗?然后,runner.exe 的第二个实例应该运行 notepad.exe - 这不会发生,我收到“Windows 找不到 'am'。确保您输入了正确的名称,然后再试一次”错误。如果我打印argc参数,则runner.exe 的第二个实例是14,它们都是奇怪的东西,比如 Files\Microsoft、SQL、Files\Common 等等。我不明白为什么会这样。我希望能够使用命令行参数将尽可能多的 runner.exe 调用串起来,或者至少 2 个。我该怎么做?

如果这有所作为,我正在使用 Windows 7。

0 投票
8 回答
50890 浏览

shell - 使用单行 shell 命令替换所有文件中的特定文本

我有一个重命名的 js 文件,我必须在我的每个 php 页面中调用它。现在我想使用 shell 将旧名称替换为新名称。我使用的是这个:

但这给出了以下错误:

我该怎么做这个替换?

0 投票
0 回答
320 浏览

windows-xp - 如何以编程方式强制 Windows XP 显示文件夹的缩略图?

ShellExecute我有一个使用文件夹路径调用的应用程序。这会在资源管理器中打开文件夹。

但是,我想确保该文件夹设置为在缩略图视图中显示内容。我怎样才能确保发生这种情况?

0 投票
1 回答
1291 浏览

php - php上的shell_exec(),exec()不起作用

我通过关闭值禁用了安全模式,并尝试在 1 和 1 专用服务器上使用 shell_exec()、exec() 这两个功能它不工作,即使它在另一台服务器上工作。

0 投票
1 回答
2118 浏览

delphi - 将 Delphi 的 ShellExecute() 与继承原始控制台的进程一起使用?

在 C 中,我system()之前在控制台应用程序中使用过该函数,如果我使用它启动另一个进程,system()则会继承调用它的进程的控制台窗口。

在 Delphisystem()中不存在,所以我ShellExecute()用来创建一个新进程,但新进程出现在一个新的控制台窗口中。有什么方法可以让它继承调用它的窗口的句柄吗?

我用过

获取控制台窗口并在 的HWND部分中传递它ShellExecute(),但这不起作用。

0 投票
3 回答
2907 浏览

c# - 如何通过 c# 传递多个命令行参数

我需要通过 c# 为一个名为 handle.exe 的进程传递多个命令行参数: http ://www.google.com.mt/search?sourceid=chrome&ie=UTF-8&q=handle.exe

首先,我需要通过管理员权限运行可执行文件。这篇文章帮助我实现了这一点: 以编程方式在 vista 中以管理员身份运行 cmd.exe,c#

但接下来是调用实际行参数的下一个问题,例如“-p explore”

如何一起指定命令行参数,或者连续指定?

当前代码如下:

谢谢