Windows服务C
我已经在C中写了Windows服务,但是缺乏用这种语言编写服务的文档意味着我有一些需要帮助的事情. 我想创建一个服务读取的配置文件,以获取一些设置/选项.我想知道最好的方法是什么以及如何做.服务.EXE将与用户指定位置的其他文件/程序一起安装.我遇到的第一个问题是,我应该将此配置文件保留在与Service .exe同一目录中,或者应该将其放入我为程序创建的%AppData%文件夹中? 服务将如何找到配置文件.我是否应该将配置文件的位置存储在注册表中,并将注册表密钥进行编码?还是可以安装服务,以便将配置文件路径作为默认命令行参数?或者我应该将配置文件保留在与Service .exe的同一文件夹中,并使用注册表HKLM/System/CurrentControlSet/Services//ImagePath? 我有以下代码: void main() { SERVICE_TABLE_ENTRY ServiceTable[2];
0 2023-12-08
编程技术问答社区
Windows服务。在以本地系统身份运行时监听套接字
我正在为Windows编写一个类似小型服务器的程序(使用MingW/GCC,在Windows 7上进行测试),该程序最终应该作为Localsystem帐户作为服务运行.我正在创建一个套接字,并使用Windows插座bind(),listen()和accept()聆听传入的连接.如果我从命令行(即不是作为服务,而是作为普通用户)运行应用程序,则我从外部IPS连接到它没有问题.但是,如果我用当地帐户作为服务运行该程序,我只能通过我自己的PC连接到服务,无论是127.0.0.1还是本地地址,192.168.1.80(我在一个小的路由器后面本地网络).使用我的本地地址的同一本地网络中的外部IP和其他PC都无法连接,即使没有运行作为服务就没有问题. 现在,我听说在以当地系统或LocalService运行或该服务无法访问台式机和网络(请注意:我的服务不是交互式)时,我听说网络的处理方式有所不同,甚至无法访问(?)由于安全考虑而引起的时间.本质上,我需要找出出了什么问题/如何聆听服务中的连接.作
0 2023-12-08
编程技术问答社区
不用Visual Studio创建Windows服务
因此,使用Visual Studio创建Windows服务是相当微不足道的.我的问题对实际上可执行的可执行能力作为服务以及如何作为直接C应用程序编写服务的方法要深入一些.我在此上找不到很多参考,但是我认为必须实现一些界面,以便我的.EXE可以安装为服务. 解决方案 设置可执行文件作为服务是其中的一部分,但实际上,它通常是由您使用的任何安装软件来处理的.您可以在测试时使用命令行SC工具(或者不需要安装程序). 重要的是,您的程序必须在启动时调用startervicectrldispatcher().这将您的服务连接到服务控件管理器,并设置ServiceMain例程,这是您的服务主要入口处. servicemain(您可以实际喜欢的任何东西都可以称呼它,但似乎总是是servicemain)然后应致电registerservicectrlhandlerex()定义回调例程,以便在某些事件发生时通知您的服务. 这是我几年前写的服务的一些摘要: 设置为服务:
0 2023-12-08
编程技术问答社区
检查另一个进程中的环境变量?
在Windows中,是否有一种方法可以检查是否存在另一个过程的环境变量?只需要检查存在,而不一定要获得价值. 我需要从代码中执行此操作. 解决方案 如果您知道存储环境的虚拟地址,则可以使用 OpenProcess 和 ReadProcessMemory 从另一个过程中读取环境.但是,要查找虚拟地址,您需要在线程信息块该过程的线程之一. 要做到这一点,您需要致电 GetThreadContext() 致电 SuspendThread() SuspendThread() .但是,为了打电话,您需要一个线程句柄,您可以通过调用其他解决方案 这是一个工作示例,可以使用打印的输出来检查存在和读取值(将其构建为与可执行的过程标识符相同的架构): getenv.cpp #include #include #include #include #include us
0 2023-12-08
编程技术问答社区
如何在C/C++中创建Windows服务?
我想使用C/C ++语言创建Windows Service(在后台运行).我该怎么做,你能给我一个教程吗? 解决方案 另一种独立平台的方式是使用 boost ::应用程序 可以找到如何找到
0 2023-12-08
编程技术问答社区
如何在windows xp下监控windows服务的状态变化?
我正在尝试在C中编写一个程序,该程序可以检测到某些Windows Services(又称NT服务)何时开始或停止. 似乎有一个函数 >,但这仅在Vista和Windows 7上可用.除了连续民意调查外,还有其他吗? 编辑: 有人能够在C中给出答案吗?我对C ++也可以,但是我想远离脚本. 解决方案 看起来您可以在XP中获得最接近的是 queryServicEstatusex (单个服务)或 enumservicesstatusex (多个服务). 要避免重复调用其中的任何一个,有些人建议使用WMI设置,查询Win32_Service's state属性.请参阅以下是一个(基本的)WMI脚本来监视Alerter服务的状态: strComputer = "." Set objSWbemServices = GetObject("winmgmts:" &_ "{impersonationLevel=impersonate}!" &_ "\\
0 2023-12-08
编程技术问答社区
C++编译器的文件夹LIB和INCLUDE位于何处?
我正在尝试为IBM DataStage ETL工具设置C ++编译器.我为Windows Server 2008 R2安装了Microsoft Visual C ++ 2008重新分布(X64). DataStage指南说 Visual Studio .NET 2008 Express Edition C ++: 将LIB环境变量设置为库的位置 SDK的目录.例如,对于Microsoft Visual Studio .NET 2008 Express Edition C ++,一个典型的位置是C:\ Program 文件\ Microsoft SDKS \ Windows \ V6.0A \ Lib. 将Include环境变量设置为include的位置 SDK的目录.例如,对于Microsoft Visual Studio .NET 2008 Express Edition C ++,一个典型的位置是C:\ Program 文件\ Microsoft SDK \ Win
0 2023-12-08
编程技术问答社区
在C语言中创建一个WinRT对象的正确方法
有人知道在C中创建WinRT对象的正确方法是什么? 我正在尝试将使用WinRT API的C ++代码转换为普通C代码. 现在,我能够获得一些WinRT静态功能. 但是,对于静态函数所需的对象,例如FIAsyncOperation_1_WindowsCDevicesCHumanInterfaceDevice_CHidDeviceVtbl中get_Completed函数的__FIAsyncOperation_1_Windows_CDevicesCEnumerationCDeviceInformation,我找不到创建对象的正确方法. 首先,我在IDL文件中找不到此对象的IID. 其次,我不确定对象的命名空间. 我确实找到了在C ++宏中声明的课程, #ifndef DEF___FIAsyncOperation_1_Windows__CDevices__CEnumeration__CDeviceInformation_USE #define DEF___FIAsyncOperat
0 2023-12-08
编程技术问答社区
检测到'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker的不匹配:值'1'与msvcrtd.lib的值'0'不匹配
我有一个用于UWP的C库项目.有一些C文件调用CPP文件中定义的C ++ WinRT函数.它正在成功编译并生成库文件(LIB).我正在使用更新1的Visual Studio 2015编译,目标平台为10.0.10240.0 ,但是,我想生成DLL而不是LIB文件.这是我为更改项目所做的更改,以便它生成dll而不是lib. try1: 因此,在启动项目中,在配置属性=>一般i从静态库更改配置. . 在所有项目中,我从多线程调试(/MTD)更改为多线程debug dll(/mdd). try2: 创建了一个新的项目Windows Universal Project,并将从项目创建LIB的所有文件添加到了该项目.不过,我遇到以下错误. 现在,我得到错误 vccorlibd.lib(init.obj) : error LNK2038: mismatch detected for 'vccorlib_lib_should_be_specified_before
0 2023-12-08
编程技术问答社区
在不同的CPU架构上引用Windows 10通用应用程序的C Dlls
基本问题/摘要:我需要参考C中的其他人在Win 10 Universal App Project中创建的二进制(DLL).但是,有一个单独的X86和手臂的DLL.我相信我需要从该项目中引用DLL(或至少Winmd文件)才能部署该项目,但是我只能将一个文件都不同时引用.这意味着该应用在一个平台或另一个平台(桌面或电话)上失败,因为它包含错误的二进制文件.寻找解决方案. 更详细的说明; 我正在尝试编写通用Windows应用程序(新的Windows 10样式).这意味着我有一个单个项目可以将外部组件的引用添加到. 我需要一些图像处理的东西,这些图像处理物质最好是第三方组件,而不是在内部开发.第三方有几个支持WinRT的SDK,但没有专门支持UWA的SDK.但是,Winrt SDK的Windows Phone和Windows桌面应用程序都有不同的二进制文件.二进制文件全部都是由C/C ++源创建的.较旧的"通用"应用程序很好,因为有一个单独的电话和桌面项目,因此您可以在每个项目
0 2023-12-08
编程技术问答社区
如何在Mingw Gcc中声明并链接到RoInitialize,RoUninitialize,RoGetActivationFactory和HSTRING函数
更新:添加了RoInitialize在roapi.h 中的外观 我正在编写纯C ++ 11 Winrt库.我不使用WRL或C ++/CX(显然,如果我想要纯C ++ 11). 我得到了编译并运行MSVC的代码,但是我想看看是否可以将代码编译和运行MingW GCC.具体来说,我使用的是从nuwen.net获得的GCC 4.7.2. 我目前需要的是一种调用Windows API函数RoInitialize,RoUnitialize,RoGetActivationFactory和HSTRING functions WindowsCreateString,WindowsDuplicateString,WindowsDuplicateString,WindowsDeleteString. > 我尝试在G ++中编译此程序,但出现了错误 extern "C"{ __declspec(dllimport)int __stdcall RoInitialize(int); } i
0 2023-12-08
编程技术问答社区
从C语言使用WinRT?
观看//构建东西,我看到Winrt API可以用C代码消费: 我对Win32开发人员可用的新鲜C API感到非常兴奋. 在哪里可以找到有关C Winrt API的信息?它比现有的Win32 C API更好? 解决方案 winrt从根本上是com,因此使用C的WinRT组件就像使用C的COM组件.就像以前一样,您可以获得所有WinRT组件的.IDL文件,也可以从这些.idl文件中产生的.H文件. .H文件同时包括C ++和C声明(根据需要包装#ifdef __cplusplus).您只能#cude他们并开始入侵. 但是,这并不是整洁的,例如像这样的c ++/cx: Windows::UI::Xaml::Controls::TextBlock^ tb = ...; tb->Text = "Foo"; 等同于此香草C ++: Windows::UI::Xaml::Controls::ITextBlock* tb = ...; HSTRING hs; H
0 2023-12-08
编程技术问答社区
在libpng.lib中出现链接器错误 "未解决的外部符号__imp___iob_func"。
我正在尝试为Windows Mobile 6编译LIBPNG,但是我会收到以下链接器错误: error LNK2019: unresolved external symbol __imp___iob_func referenced in function png_default_error libpng.lib error LNK2019: unresolved external symbol __imp_abort referenced in function png_longjmp 使用/MD选项完成了汇编,在我的主要项目之间相同. Zlib和libpng. 当使用/mt时,仍然存在错误,但略有不同: error LNK2019: unresolved external symbol __iob_func referenced in function png_default_error error LNK2019: unresolved external sym
0 2023-12-08
编程技术问答社区
如何在C/C++中格式化一个带有千位分隔符的数字
我正在尝试完成这项简单的任务.仅使用C或C ++格式化一个数字,但在Windows CE编程下. 在这种环境中,iNbue和setlocale方法均无法使用. 最后,我没有成功地做到这一点: char szValue[10]; sprintf(szValue, "%'8d", iValue); 有什么想法吗? 解决方案 这是一种方法 - 创建自定义语言环境并将其与适当自定义的刻度插入: #include #include #include struct separate_thousands : std::numpunct { char_type do_thousands_sep() const override { return ','; } // separate with commas string_type do_grouping() const overr
0 2023-12-08
编程技术问答社区
Directdraw: 旋转视频流
问题 Windows Mobile/directDraw:旋转视频流 视频预览在起作用,我现在需要的只是旋转图像的一种方法.我认为处理此操作的唯一方法是根据CTransformFilter编写自定义过滤器,该过滤器将为您旋转相机图像.如果您可以帮助我解决这个问题,例如通过帮助我使用有限的DirectDraw知识来开发此过滤器,赏金是您的. 背景/上一个问题 我目前正在开发移动设备的应用程序(HTC HD2,Windows Mobile 6).该程序需要做的一件事是使用内置摄像头拍照.以前,我使用Windows Mobile 6 SDK提供的CameraCaptureDialog进行了此操作,但是我们的客户想要一个更友好的解决方案. 这个想法是在单击控件时使用相机的照片功能在控件中预览相机的视频流,并使用摄像头的照片功能拍摄高分辨率图片(> = 2百万像素).我们对该主题进行了一些研究,发现完成此操作的最佳方法似乎是在使用直接抽签. 缺点是我从未真正使用
0 2023-12-08
编程技术问答社区
如何估计线程上下文切换的开销?
我试图通过实时截止日期来提高线程应用程序的性能.它在Windows Mobile上运行,并用C/C ++编写.我怀疑高频率的线程可能会导致明显的开销,但不能证明它或反驳它.众所周知,缺乏证据不是相反的证据:). 因此,我的问题是双重的: 如果根本存在,我在哪里可以找到切换线程上下文成本的实际测量? 不用时间编写测试应用程序,估算现有应用程序中线程开销的线程的方法是什么? 有人知道给定线程的上下文开关数(开/关)的方法吗? 解决方案 当您说您不想编写测试应用程序时,我是为了在ARM9 Linux平台上进行的测试来找出开销是什么.只有两个线程可以增强:: thread :: farte()(或者,您知道)并增加了一些变量,然后一分钟左右(没有其他跑步过程,至少没有做任何事情),应用程序打印了每秒可以进行多少个上下文切换.当然,这并不是真的,但是关键是两个线程彼此产生了CPU,而且它是如此之快,以至于考虑到开销,它就不再有意义了. 因此,只需继续写一个简单的测试
0 2023-12-08
编程技术问答社区
如何保护MSI不被修改
我想保护MSI文件免受修改.可以使用ORCA或MSI API轻松完成.很可悲,因为任何人都可以修改/添加/删除Windows安装程序自定义操作或具有管理权的属性. 有什么方法可以将MSI文件设置为某种仅阅读模式或以某种方式保护其内容? 解决方案 简短的答案是否,您不能阻止某人编辑.msi文件.您可以采用各种方法来最大程度地减少某人这样做的可能性,或者可以增加与任何编辑相关的困难的方法,但您不能完全阻止它. 要更好地回答这个问题,必须完善您要问的问题. "保护"听起来像是一种安全性问题,因此它有助于建立至少扶手椅威胁模型.例如,您可能要预防以下三件事: 有兴趣的用户更改安装到该用户系统的位 一个公司用户修改其系统管理员在用户的计算机上安装的内容 恶意政党改变并提供伪装成您的应用程序,其他人错误地安装 在这三个中,第一个并不是真正的安全边界,因此您无能为力.要么是需要管理特权并拥有它们的安装,要么是每个用户安装,允许没有管理特权的用户可以使用它.无论哪种情
0 2023-12-07
编程技术问答社区
是否有MinGW的离线安装程序?
我正在学习C,我想在笔记本电脑上安装mingw. mingw安装程序是A Web-Installer ,它要求计算机在安装时可以访问Internet.但是问题是我的计算机没有连接到互联网.因此无法安装. 所以我想在智能手机上下载完整的离线安装程序并通过蓝牙将其转移到我的PC上. 我已经尝试了TDM-GCC,但即使那样需要我下载. 那么是否有脱机安装程序到mingw?如果是,我可以在哪里得到它? 解决方案 我找不到MINGW的离线安装程序,而是找到了一个更好的Windows端口.这是 mingw-w64 来自 http://mingw-w64.yaxm.org/doku.php : mingw-w64是原始Mingw.org项目的进步,该项目为支持Windows系统上的GCC编译器而创建.它已于2007年对其进行分配,以便为64位和新的API提供支持.从那时起,它已获得广泛的使用和分发. 现在要回答此问题:必须通过下载zip文件来进行人工安装.它
2 2023-12-07
编程技术问答社区
Windows CE 6远程调试。暂停程序时没有调用栈
我正在使用Visual Studio 2008进行Windowsce 6.0的远程调试会话. 当我单击"暂停"时,我看不到程序调用堆栈. 而不是带有程序的任何功能的呼叫堆栈,我只看到一个地址. 我正在使用此处描述的调试技术(或在德语中a>) 解决方案 您的"暂停"可能会在系统调用中的某个地方停止该应用程序,因此没有"代码行"要显示.在代码中设置一个实际断点并运行.然后,您将获得调试环境的所有其他核心. 其他解决方案 CE编译器不支持调试功能.不幸的是,您可以在运行时间和消息框中进行调试.
0 2023-12-07
编程技术问答社区