从我的代码调用exe入口点 我有Windows服务,我真的需要运行一个控制台应用程序(用C++编写,但没有源码)。问题是-服务无法执行其他软件。“不要使用服务”也不是解决方案

从我的代码调用exe入口点 我有Windows服务,我真的需要运行一个控制台应用程序(用C++编写,但没有源码)。问题是-服务无法执行其他软件。“不要使用服务”也不是解决方案,c++,windows,C++,Windows,问题是-我有exe文件。在当前进程中,是否有任何方法可以调用此exe的main,例如,如果它只是DLL?您不能像调用DLL一样调用exe。不过,您可以使用CreateProcess运行exe 但是,服务是不同的,其中的主代码通常只启动作为服务运行的服务(基本上)。因此,调用它除了在服务控制管理器上单击“开始”之外,不会做任何事情 不过,您可以以编程方式将服务作为服务运行,但无法在您自己的进程空间中调用代码。将exe视为一个黑匣子,除了启动它运行(直接调用它,或间接将它作为服务运行)之外,您无法控

问题是-我有exe文件。在当前进程中,是否有任何方法可以调用此exe的
main
,例如,如果它只是DLL?

您不能像调用DLL一样调用exe。不过,您可以使用CreateProcess运行exe

但是,服务是不同的,其中的主代码通常只启动作为服务运行的服务(基本上)。因此,调用它除了在服务控制管理器上单击“开始”之外,不会做任何事情


不过,您可以以编程方式将服务作为服务运行,但无法在您自己的进程空间中调用代码。将exe视为一个黑匣子,除了启动它运行(直接调用它,或间接将它作为服务运行)之外,您无法控制它。

为什么您认为您的服务无法执行其他软件?服务可以很好地运行其他程序。然而,交互式程序存在一个问题。如果您想要交互,请查看Microsoft的文档。@Cheersandhth.-Alf如果您能提供一个链接,告诉我如何从服务运行应用程序,我将不胜感激。@starllight:哦,我做这些事情已经有20年(好吧,18年)了。很抱歉我们当时所做的非常糟糕,我们从一个服务中运行了MicrosoftWord,并截取了结果。我想不起来为什么要这么做,这不是我的决定。但我已经准备好了,项目经理是我的上司我记得的唯一一件事是,人们必须非常小心安全上下文,安全上下文的细节随着几乎每个Windows版本的变化而变化,(当时)资源工具包有一个实用工具,用于将程序作为服务运行。整洁的但是,只要
CreateProcess
?“不能像调用dll一样调用exe”。这样做不是个好主意,但你绝对确定这是真的吗?考虑到文件格式是相同的,包括我记得的导出表,我认为举证责任在你身上。“你不能像调用dll一样调用exe。”-等等,你是说的文档是错误的吗?(“lpFileName:模块的名称。它可以是库模块(一个.dll文件)或可执行模块(一个.exe文件)。”)在MSVC++exe上调用LoadLibrary的最大问题是它不包含
DllMain
,但MSVC++tsratup代码与
main
@MSalters绑定:有什么问题?是“[a]n动态链接库(DLL)的可选入口点。”可执行映像只能指定一个入口点,因此不能同时具有
WinMain
DllMain
。但是,由于DLL与EXE是不同的,加载程序不会尝试调用
DllMain
,因为它的
IMAGE\u文件头中没有
IMAGE\u DLL
特性。不过,我不知道加载程序是否正确处理EXE的重新定位。@IInspectable:您引用的是Win32。例如,纯资源DLL显然不需要它。不过,对于MSVC++运行时,入口点根本不是可选的。如果链接到MSVC++运行时,它将接管入口点。您自己的入口点将不再是Win32入口点。(这也是为什么您的入口点可以是
int main()
而不是
int-WINAPI-WinMain(HINSTANCE,HINSTANCE,PWSTR,int);
-MSVC++入口点进行翻译)