Articles of shellexecute

什么可能会导致ShellExecute返回SE_ERR_OOM(错误8)?

我经常从本机C ++ / Win32应用程序中调用ShellExecute来执行GUI中由最终用户select的任何shell项目。 项目是可执行文件/脚本或链接(.lnk)。 在某些对我来说SE_ERR_OOM情况下,以下函数有时会返回8 ( SE_ERR_OOM错误;只是非常简要的logging)。 结果,该项目不被执行。 什么可能导致这个错误? int doExecute(LPCTSTR file, LPCTSTR args, LPCTSTR workDir) { assert(file && *file); HRESULT hRes = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); assert(hRes == S_OK || hRes == S_FALSE); int code = (int)ShellExecute(NULL, NULL, file, args, workDir, SW_SHOWNORMAL); doLog("ShellExecute returned: %d, %u", code, GetLastError()); // EDIT CoUninitialize(); return code; […]

在Windows XP上使用Ruby进行系统调用的超时问题

下面的代码 require 'timeout' begin timeout(20) do # Line 4 result = `hostname` end # Line 6 rescue Timeout::Error puts "Timeout" exit end puts "Result:" + result # Line 12 抛出错误 issue:rb:12:在<main>': undefined local variable or method结果为main:Object(NameError) 但如果我注释掉超时元素(第4和第6行),它工作正常。 我曾尝试使用IO.popen,IO.select等,但没有任何帮助。 我已经在其他许多领域使用这种超时技术,它运行良好。 它似乎没有与超时值有关,因为我已经尝试了更大更小的值。 在Windows XP上使用Ruby 1.92。 任何帮助非常感谢。 PS我原来的问题是没有运行“主机名”,而是一个更复杂的SQL Server批处理作业。 作为一个奖励点,超过超时的长时间运行的系统任务会自动被杀死吗? 我已经阅读了很多有关超时时间库不忙时运行系统任务超时超时的post?

ShellExecute获取打开文件夹的权限

我正在使用ShellExecute(NULL, L"open", szSomeDirectory, 0, 0, SW_SHOWDEFAULT)在资源pipe理器中打开一个目录。 我试图打开一个目录,我通常会提示You currently do not have permission to access this folder. 并会给我select获得访问并显示UAC提示。 当我执行ShellExecute时,资源pipe理器给我一个错误消息说Access Denied 。 我的程序以pipe理员权限运行,但这似乎并不重要。 我如何获得打开这个文件夹?

如何终止一个使用ShellExecute开始的程序

在MFC中,我使用这个代码 ShellExecute(NULL, _T("open"), _T(EXTERNAL_APP), params, _T(EXTERNAL_PATH), SW_HIDE); 启动一个在后台运行的外部程序。 但是,当我的应用程序终止,这个程序仍在运行,可以通过检查Windows任务pipe理器窗格来validation。 所以我的问题是, 当我的应用程序停止时 , 如何让外部程序停止 ?

将执行过程的输出指向当前cmd

我可以从JScript脚本执行程序吗?执行程序的输出将被写入当前控制台吗? 目前我正在使用Shell.Application.ShellExecute,它正在为执行的应用程序打开另一个新的控制台。 在我的情况下,JScript是用ShellExecute执行的编译器的一个包装器。 所以会发生的是,所有的编译器错误都会丢失,因为它们被打印在另一个控制台中。

使用URL的ShellExecute导致未关联的错误消息。 哪个文件关联被失踪了?

我在c ++和windows中使用“ShellExec”来在默认浏览器中打开一个url。 对于极less数客户来说,它会失败,并显示以下消息:“该文件没有与执行此操作相关的程序”。 我知道这意味着在这个客户的registry中“http”文件types关联丢失或无效。 问题: 我可以通过编程方式检测到这个问题并修复或避免它吗? – 我正在考虑使用AssocQueryKey和RegQueryValueEx,但不知道这是可能的。 我很感激有关解决这个问题 我没有一个能够显示问题的系统,所以我希望这里的某个人已经解决了这个问题。 这是打开浏览器的代码。 urlToNavigateTo会像“http://www.website.com/function?key=9271” ErrorClass error; SHELLEXECUTEINFO execInfo; ZeroMemory (&execInfo, sizeof(SHELLEXECUTEINFO)); execInfo.cbSize = sizeof(SHELLEXECUTEINFO); execInfo.lpFile = urlToNavigateTo.c_str(); execInfo.nShow = SW_SHOWNORMAL; execInfo.hwnd = m_hWnd; // parent window for error messages BOOL bOK = ShellExecuteEx (&execInfo); if (bOK!=TRUE) { STRING errMessage = _T("Could not navigate to url Reason:" )+ […]

从32位应用程序打开64位registry编辑器

我试图使用ShellExecute从我的32位应用程序打开64位registry编辑器。 我注意到在进程资源pipe理器,如果我通常打开registry,它说图像是64位,但如果我从我的32位应用程序与ShellExecute打开C:\Windows\Regedit.exe ,Process Explorer说图像是32位。 (并且它打开Windows目录中的registry,而不是在SysWOW64中) 我发现如果我在调用ShellExecute之前使用Wow64DisableWow64FsRedirection函数,它会打开它的64位图像。 但是我的应用程序不能在32位XP上运行。 令我困惑的是无论我打开registry的哪一种方式,它们都驻留在C:\Windows ,并且都是相同的可执行文件。 同一个可执行文件如何有两种不同的图像types? 我怎样才能打开没有Wow64DisableWow64FsRedirection的64位?

执行exception取决于进程创build(ShellExecute vs CreateProcess)

我们正在运行一个Windows服务,负责监视一组进程。 该服务基本上只负责(a)检查定义的作业是否正在运行,以及(b)如果不是,则开始作业。 该服务是通过以下命令创build的(sc: https : //technet.microsoft.com/en-us/library/bb490995.aspx ): sc create "My Service" binPath= C:\heyoo\myservice.exe type= own start= auto error= normal sc start "SCF Service" 服务负责创build的作业之一是“Camera.exe”。 Camera.exe从连接的摄像机(FireWire 1394)中检索video源,并对其进行一些处理。 一个星期前,使用ShellExecute重写服务使用CreateProcess,以便能够更好地监视定义的作业(因为它得到HANDLE的过程) 。 ShellExecute调用(旧方法): bool Execute() { int result = (int)ShellExecute(NULL, "open", "C:\\bin\\Camera.exe", NULL, NULL, SW_SHOWDEFAULT); return result > 32; } CreateProcess调用(新方法): // Called with Execute("C:\\bin\\Camera.exe", ""); bool Execute(std::string prog, […]

如何使一个function,所以我可以input我想打开的浏览器?

我的代码有什么问题? 我正在尝试制作一个程序,您可以键入要打开的浏览器。 如果语句,VC ++不断强调等号。 #include <iostream> #include <Windows.h> using namespace std; void OpenBrowser(string browser) { ShellExecuteA(NULL, "open", browser.c_str(), NULL, NULL, SW_MAXIMIZE); } int main() { char a; std::cout << "What is your favourite browser?\n" << std::endl; std::string input; std::cin >> a; if (a = "firefox") { OpenBrowser("firefox"); } else { OpenBrowser("chrome"); } system("pause"); return 0; […]

ShellExecute(和ShellExecuteEx)对我的URL没有任何作用

我正在使用C ++ Builder XE7创build一个项目,在这个项目中,用户可以点击一个button来打开一个Web链接,例如打开一个支持页面,或者在社交媒体上分享他的体验。 为此,我使用了ShellExecute()函数,除了一个button外,它运行良好。 当我点击这个button时,没有任何反应。 ShellExecute()函数返回没有错误(返回值是42),但我的默认浏览器不打开,网页根本不显示。 这是我的ShellExecute()实现 const HINSTANCE result = ::ShellExecute(handle, "open", url.c_str(), NULL, NULL, SW_SHOWDEFAULT); 我也尝试了ShellExecuteEx()函数: ::SHELLEXECUTEINFO info; std::memset(&info, 0, sizeof(info)); info.cbSize = sizeof(info); info.hwnd = handle; info.lpVerb = "open"; info.lpFile = url.c_str(); info.nShow = SW_SHOWDEFAULT; if (!::ShellExecuteEx(&info)) url参数包含我试图打开的网站链接。 出于安全原因,我不能把它作为示例发布,但是我在浏览器(FireFox)中testing了它,并且运行良好。 另一方面,如果我通过用Google网站replaceurl内容来执行我的代码,所有的工作都按预期进行。 handle只是父框架的Handle参数。 我也尝试调整ShellExecute/Ex()参数,如hwnd和nShow字段,但没有改变。 有人可以指我什么是错的?