Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过命令行将exe转换为服务的最简单方法_C++_Windows_Service_Visual Studio 2015 - Fatal编程技术网

C++ 通过命令行将exe转换为服务的最简单方法

C++ 通过命令行将exe转换为服务的最简单方法,c++,windows,service,visual-studio-2015,C++,Windows,Service,Visual Studio 2015,我发现了很多关于这个话题的问题,我会把它们链接到上面。不幸的是,他们要么没有回答我的问题,要么似乎回答了,但随后导致msdn上的代码示例没有在Visual Studio中编译 < >我想用C++中的Visual Studio编译的EXE转换成一个服务,使用上面的答案中提到的方法,但是当我尝试添加必要的Service函数,它导致需要添加的所有其他服务功能时,我最终尝试编译不编译的函数。其中一个错误是它抱怨#include“sample.h”,因为它从未创建过,尽管页面指出编译器将生成VS没有生成的

我发现了很多关于这个话题的问题,我会把它们链接到上面。不幸的是,他们要么没有回答我的问题,要么似乎回答了,但随后导致msdn上的代码示例没有在Visual Studio中编译

< >我想用C++中的Visual Studio编译的EXE转换成一个服务,使用上面的答案中提到的方法,但是当我尝试添加必要的Service函数,它导致需要添加的所有其他服务功能时,我最终尝试编译不编译的函数。其中一个错误是它抱怨
#include“sample.h”
,因为它从未创建过,尽管页面指出编译器将生成VS没有生成的头文件

我只想能够通过VS exe从.cpp文件自制并将其转换为windows服务,而无需使用外部程序,除非像上面链接中提到的sv.exe这样的操作系统内置了尽可能少的WINAPI

svc.cpp文件中的代码产生以下错误,注释掉了
#include“smaple.h”

argument of type "const char *" is incompatible with parameter of type "HMODULE"    

    identifier "SVC_ERROR" is undefined 

        'DWORD GetModuleFileNameW(HMODULE,LPWSTR,DWORD)': cannot convert argument 1 from 'const char [1]' to 'HMODULE'  

    'SVC_ERROR': undeclared identifier  
另外,当我在谷歌上搜索const char错误时,即使将错误代码更改为active(对我来说就是这样),我也会发现它不起作用。我之所以这样做是因为当我在谷歌上搜索错误时,我发现了另一个问题,答案是这取决于修改构建设置,而当我在谷歌上搜索时,我直接找到了我链接到的问题,该问题的答案不起作用

另一方面,我无法相信,当唯一的一般区别是自动执行和手动执行时,将可执行程序转换为服务会有多困难(以及涉及到多少代码)

另外,如果有一种方法可以在不使用WINAPI或外部程序的情况下完成我的工作,请告诉我


更新:我试图模拟AV程序等程序在将自身添加到注册表时所做的操作,以便在启动时自动启动。

GetModuleFileName(“,…)
应改为
GetModuleFileName(NULL,…)
。该示例将传递一个字符串,其中需要一个模块句柄。仅仅因为示例没有按原样编译并不能减轻您阅读文档的需要,例如,理解示例试图向您展示的内容。而且服务不容易从头开始编写,因此需要一整套API来与服务控制管理器进行来回通信。这不仅仅是EXE的“自动执行与手动执行”的问题。您似乎不了解服务实际上是什么。如果您想要的只是自动执行,请查看注册表的各种,或者。除了不正确理解示例之外,我不明白如果无法通过复制/粘贴编译,为什么可以将其称为complete。另外,在查看注册表时,我仍然需要使用一堆[WINAPI代码](),因为我需要能够以编程方式添加值。同样,我也不明白为什么它需要这么多。当我说自动执行和手动执行是一般性的区别时,我指的是程序功能的核心区别,即程序不作为服务可以做什么,还是作为服务你应该自己构建
sample.h
。编译器不会为您执行此操作。
GetModuleFileName(“,…)
应改为
GetModuleFileName(NULL,…)
。该示例将传递一个字符串,其中需要一个模块句柄。仅仅因为示例没有按原样编译并不能减轻您阅读文档的需要,例如,理解示例试图向您展示的内容。而且服务不容易从头开始编写,因此需要一整套API来与服务控制管理器进行来回通信。这不仅仅是EXE的“自动执行与手动执行”的问题。您似乎不了解服务实际上是什么。如果您想要的只是自动执行,请查看注册表的各种,或者。除了不正确理解示例之外,我不明白如果无法通过复制/粘贴编译,为什么可以将其称为complete。另外,在查看注册表时,我仍然需要使用一堆[WINAPI代码](),因为我需要能够以编程方式添加值。同样,我也不明白为什么它需要这么多。当我说自动执行和手动执行是一般性的区别时,我指的是程序功能的核心区别,即程序不作为服务可以做什么,还是作为服务你应该自己构建
sample.h
。编译器不会帮你做的。