问题标签 [shellexecuteex]

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 投票
2 回答
2716 浏览

winapi - 在没有 .NET 的系统上启动 .NET 应用程序时,带有 SEE_MASK_FLAG_NO_UI 的 ShellExecuteEx 显示错误

ShellExecuteExWin32 函数调用SEE_MASK_FLAG_NO_UI在其结构中有一个标志,该标志SHELLEXECUTEINFO应禁止在启动应用程序时因错误而显示的任何错误对话框。

这里的 MSDN 文档对此非常明确:

在我的例子中,我在没有安装 .NET 的 Windows XP 系统上启动一个 .NET 可执行文件。我系统地收到以下消息,由 Windows 在对话框窗口中显示:

我不希望用户必须处理此消息。我宁愿从ShellExecuteEx我的程序中取回错误代码并能够优雅地处理它。这是我用来启动外部可执行文件的代码片段:

如果系统上不存在 .NET,是否有官方方法可以抑制错误消息?还是我必须在执行应用程序之前自己检查这个特定条件(但我事先不知道它是 .NET 应用程序还是本机应用程序)。例如,如果我正在启动的应用程序缺少一些 DLL,该怎么办?

0 投票
1 回答
424 浏览

windows-vista - “ShellExecuteEx 失败;代码 18”是什么意思(在 vista 上)

我的一个朋友在尝试运行卸载程序和或新程序应用程序时收到此错误消息,Windows 只显示“ShellExecuteEx 失败;代码 18”并拒绝运行该程序。

0 投票
2 回答
962 浏览

windows - 使用 ShellExecuteEx 启动的进程的默认访问权限是什么?

我需要对一个开始的进程执行某些操作ShellExecuteEx——比如等待它、复制句柄、查询和设置信息等。现在我想知道我是否可以对传递给hProcess的结构中返回的成员执行所有这些操作。有人知道吗?SHELLEXECUTEINFOShellExecuteEx

在使用返回时,调用的进程是否默认具有类似、、、(等等)的ShellExecuteEx权限?PROCESS_DUP_HANDLESYNCHRONIZEPROCESS_SET_INFORMATIONPROCESS_QUERY_INFORMATIONhProcess

0 投票
3 回答
3786 浏览

windows - 如何创建一个不是其创建过程的子进程?

我有两个进程,A 和 B。在某个时候 A 创建 B。在创建 B 之后,如果 A 的进程被杀死,我希望 B 仍然存在。

我正在使用 CreateProcess() 来创建 B,但我似乎找不到任何方法让它在没有它成为孩子的情况下创建进程。与 ShellExecuteEx() 相同,但我可能缺少一些标志。

有谁知道我可以用什么来做到这一点?

编辑:我忘了提到两个进程都需要另一个进程的句柄或进程 ID

0 投票
1 回答
1324 浏览

windows-7 - 如何将 CreateProcess 转换为 ShellExecuteEx?

我使用 MS detour 库来挂钩 CreateProcess,它在 Win7 上运行良好。然后我想用 ShellExecuteEx 替换绕行的 CreateProcess,以便我可以使用“runas”以管理员权限静默运行程序。不幸的是,参数类型不一样。

这是函数签名:

这里我调用 ShellExecuteEx:

但是,这个赋值有错误: ShExecInfo.lpFile = lpszImageName; VC2005 投诉数据类型不一样:"cannot convert from const unsigned char * to const char *"

但是数据类型是LPCWSTRCreateProcess 中的参数 lpszImageName 和 ShExecInfo.lpFile 是LPCTSTR.

如果我使用 (const unsigned char*) 转换 lpszImageName,lpFile 的值只是 lpszImageName 值的第一个字母。

例如,如果 lpszImageName 是“C:\windows\system32\cmd.exe”。赋值后,lpFile 的值只有 'C'。

如何从 LPCWSTR 转换为 LPCTSTR?或者我该如何进行转换?

谢谢!!!

0 投票
2 回答
2960 浏览

winapi - WinApi ShellExecuteEx - 在文件列表上使用动词“复制”

是否可以使用 ShellExecuteEx 复制或剪切给定目录中的一组文件?Windows 功能在单个文件上运行良好,但我在任何地方都找不到有关该主题的任何提示(带有文件列表)。

我不希望有任何替代方法(例如 xcopy),因为在执行特定于 shell 项的操作后,我需要 windows shell 功能撤消/重做。

microsoft msdn 库中根本没有记录它。我试图用 PChar("Drive:\file1.fileExt","Drive:\file1.fileExt") 和其他此类常见列表格式等项目列表填充 'lpfile' 参数......但没有做,shellExecuteEx 返回一个 < 33 的值。

是否有诸如“select”或“addtoselection”之类的动词?是否应该添加标志 SEE_MASK_IDLIST 并且在这种情况下是一个 ITEMIDLIST 结构能够定义一个文件列表,ShellExecuteEx 动词将在其上执行?

0 投票
1 回答
1422 浏览

delphi - 等到文件编辑结束

我有下一个任务。有必要等待编辑 Microsoft Office 文件结束。我使用下一个常规方法:文件正在编辑而文件正忙:

这种方法适用于通过 Microsoft Word 编辑文件,而不是在 Open Office 中。OpenOffice 使用一个进程来打开多个文件,就像 MS Office 一样。但是使用 OpenOffice Writer 有一些问题:函数 FileIsBusy 在OpenOffice Writer首次保存文件后返回 false。有什么建议吗?

==============================

我找到下一个解决方案:

保存后,ОО 发布文件一段时间,一次又一次独占共享

0 投票
3 回答
3307 浏览

windows - 使用 ShellExecuteEx 启动外部应用程序并等待它被初始化

我有一个应用程序需要在链中运行其他几个应用程序。我正在通过ShellExecuteEx. 运行每个应用程序的顺序非常重要,因为它们相互依赖。例如:

一切正常,但有一个可能的问题: ShellExecuteEx启动应用程序,然后几乎立即返回。例如,当App1已正确启动但尚未完成某些内部任务时,可能会出现问题,它尚未准备好使用。但是ShellExecuteEx已经开始App2了,这取决于App1,并且App2由于需要完全初始化而无法正常启动App1

请注意,我不想等待App(N-1)完成然后开始AppN

我不知道这是否可以使用 ShellExecuteEx 解决,我尝试使用

但没有任何影响。

启动AppN应用程序后,我可以处理该过程。如果我假设应用程序在其主窗口创建后被初始化(所有应用程序都有一个窗口),我可以以某种方式在其消息队列上放置一个钩子并等待直到WM_CREATE出现或可能WM_ACTIVATE吗?收到此类消息后,我的应用程序将知道它可以继续前进。

这只是一个想法。但是,我不知道如何放置这样的钩子。因此,如果您能在这方面帮助我,或者您有更好的主意,那就太好了:)

此外,该解决方案必须适用于 Windows XP 及更高版本。

谢谢你的时间。

已编辑

@Cosmic Prund:我不明白你为什么删除你的答案?我可以试试你的想法...

0 投票
1 回答
1039 浏览

delphi - 写保护的 USB 驱动器上的 ShellExecuteEx 错误?

我正在尝试在写保护的 USB 驱动器上测试应用程序,我想使用 ShellExecuteEx API(我需要使用此 API 调用,因为我需要 lpVerb := "runas")调用来执行第二个程序,但我通过 ShellExecuteEx 调用不断收到“写保护错误”。我似乎无法弄清楚正在尝试写入驱动器的内容,我没有正在写入驱动器的代码,我什至使用最新的Microsoft 标准用户分析器应用程序验证器来尝试验证正在尝试写入的内容开车没有成功。这是我不断收到的错误:

[写保护错误]

写保护错误

以下代码中的任何内容都没有尝试写入此驱动器,ShellExecuteEx API 调用错误的方式来执行我想要执行的操作吗?如果没有,我怎样才能从弹出中得到这个错误。任何帮助将不胜感激。

[WP-ON.reg]

[WP-OFF.reg]

注意:每次更新注册表时,您必须弹出并重新插入设备。

[项目1.dpr]

[启动.清单]

[启动.dpr]

0 投票
3 回答
10809 浏览

delphi - 当期望 31 时,ShellExecuteEx 在 hInstApp 中返回 42(无文件关联)

在 Delphi 7 中使用 ShellExecuteEx 使用动词打开文件时,我似乎总是在 hInstApp 中返回 42,即使我期望得到失败和 31 结果,因为没有文件关联。我正在从 ShellExecute 转移到 ShellExecuteEx,以便可以将 WaitForInputIdle 与进程句柄一起使用。

当我没有安装 Excel 时尝试打开 XLS 文件时,ShellExecute 按预期返回 31,但 ShellExecuteEx 似乎成功并返回 42,即使它实际上已失败并弹出默认的 Windows 文件关联对话框。

难道我做错了什么?在 WinXP 和 Win7 上使用 Delphi 7。

下面的示例代码。在 Win XP 32 位操作系统上使用 Delphi 7,但在 Win 7 64 位上也得到相同的结果。只是在 hInstApp 值上显示消息返回 42,而我希望得到 31,因为我没有安装 Excel。