问题标签 [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.
vb6 - VB6 - 如何从作为服务运行的应用程序打开文件
我已经为这个问题苦苦挣扎了将近一个星期。我需要一个作为服务运行的 vb6 应用程序来打开文件。我不需要对文件做任何事情,我只需要打开它。我尝试使用 ShellExecute 和 ShellExecuteEx 以及使用 CreateProcess 尝试从命令行启动文件。当这些实现都不起作用时,我尝试启动另一个应用程序(使用 CreateProcess),其唯一任务是打开文件然后关闭自身。
这些解决方案在应用程序正常运行时都可以工作,但在作为服务运行时则不行。应用程序能够在作为服务运行时直接或间接打开文件非常重要,它只需要能够触发它即可。
我了解自 Windows Vista 以来 Windows 已锁定服务与桌面交互的能力,但我确信必须有一种方法可以从服务触发文件打开命令。我开发的应用程序能够使用 CreateProcess 从命令行运行 pg_dump.exe(postgres 数据库的备份可执行文件)来备份数据库文件,同时作为服务运行。这就是为什么我虽然从服务中启动一个 exe 来间接打开文件可能会起作用。但是,由于某种原因,该应用程序可以正常运行 pg_dump.exe,但不会运行我创建的可执行文件。我想知道我创建的 exe 是否期望在桌面上存在某种形式,这就是该服务不想启动它的原因。
这是我的 CreateProcess 代码(我没有写大部分,所以请原谅我的无知):
这是运行 pg_dump.exe 的实现,它在从服务运行 exe 并创建数据库备份文件时是成功的:
这是一个类似的实现,它尝试运行将尝试打开相关文件的辅助 exe:
当应用程序作为服务运行时,上述代码不起作用。为什么 pg_dump.exe 运行成功,而我自己的 GDNPOpener.exe 却没有?
如上所述,我也尝试使用 ShellExecute 和 ShellExecuteEx 直接从服务中打开文件,但没有成功。(我在辅助 exe (GDNPOpener.exe) 中使用 ShellExecuteEx 打开文件)
如果有人知道如何修复我的 exe 以便我的服务运行它,我将不胜感激!如果有人知道从服务打开文件的任何替代方法,那也将不胜感激,谢谢!
c++ - 为什么 ShellExecuteEx() 参数不起作用?
假设我希望程序“C:\MyProgram.exe”使用两个变量的参数运行。出现的问题是 MyProgram 只接收 2 个参数,而我清楚地传递了 3 个参数。
我的代码:
因为互联网上没有太多关于 ShellExecuteEx 可变参数的信息,所以我找不到合适的解释。
你们中有人知道如何解决这个问题吗?提前致谢!
c++ - 拦截使用 ShellExecuteEx 打开的窗口的关闭消息
我有一个烦人的程序,在关闭时不会保存他的位置。我做了一个小控制台程序,打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存位置,我如何拦截关闭消息,以便在窗口自行销毁之前保存位置?
c++ - 如何确定使用 ShellExecuteEx 创建的进程是否拥有一个窗口?
我ShellExecuteEx
用来运行外部应用程序:
一切正常,但此外部应用程序存在计划外行为,在关闭其主窗口后,其进程仍处于活动状态。这可以防止WaitForSingleObject(shExInfo.hProcess, INFINITE);
返回,我必须手动终止该过程。
相反,我正在寻找一种方法来替换WaitForSingleObject(shExInfo.hProcess, INFINITE);
一个循环,该循环检查外部进程是否拥有一个窗口,如果没有则终止它。
这是我想到的,但如果有更好的方法,请为我指出。
更新:
感谢罗布森的回答,我设法做到了我打算做的事情:
我的循环:
c++ - 使用命令行命令时如何获取返回数据?
我继承了一个 c++ 应用程序,它使用“ShellExecuteEx”运行一些命令,特别是使用 appcmd.exe。我希望能够运行该命令,然后获取返回数据,就像我从命令行运行它时看到的那样。
我不一定想使用 ShellExecuteEx,但如果我不使用它,我需要运行一些非常简单的东西,因为我不习惯 C++ 编程。我的背景更多是 C# 和类似的语言。
delphi - 未提升的程序启动提升的更新程序,更新程序应等待程序完成
我有 2 个应用程序,program.exe 和 updater.exe,它们都是用 Delphi5 编写的。程序在没有管理员权限(也没有清单)的情况下运行,更新程序有一个带有“requireAdministrator”的清单,因为他必须能够在 Program-Folder 写入来更新 program.exe。
问题是启动更新程序并让他等到程序关闭。我在网上找到了不同的方法,但没有一种方法有效(在大多数情况下,第一个应用程序启动第二个应用程序并等待第二个应用程序的结束,在我的情况下,第二个应用程序应该等待第一个应用程序的结束)。
更新程序应该等待,这很容易
updater.exe
方式 1
使用 CreateProcess 启动更新程序:
program.exe
不做任何事情,仅当更新程序没有带有 requireAdministrator 的清单时才有效。如果我使用 explizit 管理员权限运行程序,它也可以工作。
方式 2 使用 ShellExecuteEx 启动更新程序:
program.exe
不起作用,MyHandle 每次运行此过程时都有不同的值(无需重新启动程序),因此更新程序无法使用它。
所以我不知道如何启动 updater.exe 并将 program.exe 的句柄写入文件中。
我对编程的这些部分不太熟悉......有人对我的问题有想法吗?
python-2.7 - Python:在提升模式下仅运行自动化脚本的一部分
我正在运行一些自动化测试,有些部分必须在提升模式下运行才能工作。这很好;我正在使用 pywin32 库中的 shell.ShellExecuteEx 来调用我自己的脚本,并且效果很好。
这些是我正在使用的确切参数:
到目前为止,我的方法是将整个自动化代码放入一个模块中,然后以提升的权限调用该模块。
但是,我的一些代码只有在没有以提升模式运行时才能工作。我必须在两者之间切换。我怎样才能做到这一点?
windows - 如何使用 ShellExecuteEx 实现“打开方式”命令并等待它完成?
看似简单的任务:我想打开标准 Windows 对话框以选择用于打开文件的应用程序,然后等待该应用程序完成。互联网告诉 ShellExecuteEx 是要走的路。
好的,代码如下:
但它不起作用:指定 SEE_MASK_INVOKEIDLIST 标志使 hProcess 始终为 NULL,即使确实启动了新进程。
如何解决这个问题?提前致谢!
excel - ShellExecuteEx 在 Excel VBA 中崩溃
由于发生了 Windows 更新,一个 API 调用ShellExecuteEx(sExecuteInfo)
崩溃,说:
0x75F7A529 (shell32.dll) 处的未处理异常访问冲突读取位置 0x68686903
我不知道这里出了什么问题,你能帮我吗?
定义 :
代码:
c++ - ShellExecuteEx runas 中的 lpParameters
我正在 qt 中开发一个应用程序,我需要使用 ShellExecuteEx 来启动一个应用程序。我正在运行一个批处理文件,我需要向它传递 2 个参数。第一个参数只是一个字母,但第二个参数是可能包含也可能不包含空格的路径。无论我做什么,它都不会逃脱这些空间。似乎包含任何转义的引号实际上会破坏整个通话。我认为问题在于runas。我不是 100% 确定它是如何工作的,但它似乎正在复制调用并在升级的 shell 中运行它。似乎这个过程因添加的引号而中断。
这是我的 ShellExecute 代码。我已将其简化为传入 1 个参数,但这仍然会中断。
这是 test.bat 只是为了完整性
我得到的shell输出是。
脚本的路径是
您可以看到初始命令失败,因为它弄乱了原始路径。
知道如何使用这样的 runas 命令在参数中包含引号吗?