Tag: 服务

限制用户停止Windows服务

我参与编写Windows服务。 在我开始写作之前,我想知道 在LOGIN USERS方面要考虑哪些要点,特别是如何限制其他用户“停止服务”? 在编写服务时我应该考虑哪些通用点? 一旦用户尝试停止服务,如何显示警告提示? 注意:我正在尝试用C编写服务。 谢谢。

停止服务之前的WTSSendmessage

我试图在用户尝试停止服务时显示一个消息框。 为此,我使用了WTSSendmessage API ……一旦发生SERVICE_CONTROL_STOP事件,我就调用了该函数。 我在上面的步骤是对的吗? 因为一旦用户试图停止服务,我没有收到消息框。 请指导我…… 以下是我的代码片段:: case SERVICE_CONTROL_STOP: WTSSendMessage = (fptr1)GetProcAddress(hinstLib, “WTSSendMessage”); BOOL ret = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSession, lpszTitle, 12 ,lpszText, 7 ,MB_YESNO|MB_ICONINFORMATION, 0, &res, TRUE); ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; SetServiceStatus( serviceStatusHandle, &serviceStatus ); SetEvent( stopServiceEvent ); return;

触发服务从服务本身重新启动

我开发了一个应用程序mysvc ,它通过/etc/init.d/mysvc-service作为(Peta)Linux服务运行(名称应该不同,因为它们在petalinux / yocto词汇表中是不同的“应用程序”)。 /usr/bin/mysvc通过start-stop-daemon : # start() start-stop-daemon -S -o –background -x /usr/bin/mysvc # stop() start-stop-daemon -K -x /usr/bin/mysvc 它嵌入了一个简单的HTTP服务器,允许盒重启/关闭(工作),我想添加一个只运行/etc/init.d/mysvc-service restart的Restart按钮(从命令行运行正常)。 当我想从程序本身使用Linux /etc/init.d/系统(构建命令行参数等)时,我检查了另一个重新运行程序本身的问题 (即响应HTTP请求)由我的服务器处理)所以我尝试了以下方法: daemon() 将调用daemon()基本上fork()和exit()父进程。 子进程实际上只是运行/etc/init.d/mysvc-service start : if (daemon(1,1) == 0) { // Forks and exit() the parent. We are the child system(“/etc/init.d/mysvc-service start”); // “start” and not “restart” because the parent […]

使用文件I / O正确创建和运行win32服务

我已经基于这个代码示例编写了一个非常简单的服务应用程序。 应用程序作为其正常运行的一部分,假定在找到的目录中或在其执行路径中存在文件。 当我’安装’服务然后从控制面板中的服务管理器“启动”服务时。 应用程序失败,因为它找不到要打开和读取的文件(即使该文件与安装的可执行文件位于同一目录中)。 我的问题是什么时候运行Windows服务,这应该是预期的运行路径? 当调用’CreateService’时,似乎只有二进制的路径参数,而不是执行。 有没有办法指出应该从哪里执行二进制文件? 我在Windows Vista和Windows 7上试过这个。得到同样的问题。

检查是否使用C安装了服务

我正在编写一个创建Windows服务的C应用程序。 我想在尝试调用安装function之前检查服务是否已安装,但我无法找到如何检查它。 我已经编写了上面的代码来尝试: DWORD InstallMyService() { char strDir[1024 + 1]; SC_HANDLE schSCManager; SC_HANDLE schService; LPCTSTR lpszBinaryPathName; if (GetCurrentDirectory(1024, strDir) == 0) { aff_error(“GetCurrentDirectory”); return FALSE; } strcat(strDir, “\\”MY_SERVICE_BIN_NAME); if ((schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { printf(“Error OpenSCManager : %d\n”, GetLastError()); return FALSE; } lpszBinaryPathName = strDir; schService = CreateService(schSCManager, MY_SERVICE_NAME, MY_SERVICE_DESCRIPTOR, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, […]