我可以从.net项目远程启动或停止服务.
ConnectionOptions options = new ConnectionOptions();
options.Username = @"192.168.36.22\test";
options.Password = "test";
ManagementScope scope = new ManagementScope(@"\\192.168.36.22\root\cimv2", options);
scope.Connect();
ManagementOperationObserver Stop = new ManagementOperationObserver();
Stop.Completed += new CompletedEventHandler(Stop_CallBack);
try
{
string NameServices = "ArcGIS Server";
WqlObjectQuery query = new WqlObjectQuery("SELECT * FROM Win32_Service WHERE Name=\"" + NameServices + "\"");
ManagementObjectSearcher find = new ManagementObjectSearcher(scope, query);
foreach (ManagementObject spooler in find.Get())
{
spooler.InvokeMethod("StopService", new object[] { });
spooler.InvokeMethod(Start, "StopService", new object[] { });
}
}
....
Run Code Online (Sandbox Code Playgroud)
我该如何重新启动此服务?
我需要在OS Windows中获取有关系统的信息,例如:主板信息,硬盘信息等.我可以从wmi服务获得它.但我需要用.NET核心应用程序来收集它.
我知道在.NET应用程序中有接口IWbemServices与WMI服务交互,但我在.NET核心中找不到类似的东西.
所以我有一个问题:
我是新用的WMI.它是什么?
我可以在C#中使用WMI调用来获取PC上的驱动程序列表吗?如果是这样,我打电话给哪个班级?
我使用 C++ 编程,我使用一个示例来理解我的问题的主要内容。
假设,我们想在 windows 操作系统中获取当前用户名,我们可以使用以下代码:
#include <windows.h>
#include <Lmcons.h>
char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
Run Code Online (Sandbox Code Playgroud)
此外,我们可以按照此处解释的说明使用 wmi并使用Win32_ComputerSystem.UserName。
所以,我希望你已经完全理解了,wmi 和使用 api 或任何其他方式有什么不同?
坦克你的回应。
如何使用WMI从.NET代码启动,停止和查询本地计算机上的服务?(我正在使用C#)
我已经找到了使用ServiceController类执行此操作的良好且准确的答案,但我想尽可能使用WMI。
我有以下代码从 Java 内部运行 Windows 服务。代码使用 JInterop Java 库,JInterop 是 Windows COM 服务器的纯 Java COM 客户端。JIntop 的更多细节可以在这里找到 [ http://fishi.devtail.io/weblog/2015/01/21/pure-java-dcom-bridge-j-interop/]
String cmdFile = "service.bat";
results = wbemServices_dispatch.callMethodA(
"Get", new Object[]{ new JIString("Win32_Process"),
new Integer(0), JIVariant.OPTIONAL_PARAM()});
IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)JIObjectFactory.narrowObject(
(results[0]).getObjectAsComObject());
results = wbemObjectSet_dispatch.callMethodA("Create",
new Object[]{ new JIString(targetFilePrefix + cmdFile),
JIVariant.OPTIONAL_PARAM(),
JIVariant.OPTIONAL_PARAM()});
Run Code Online (Sandbox Code Playgroud)
是否可以使用相同的库或以其他方式以与上述相同的方式将 powershell 文件(.ps1)作为服务运行。
调用ExecMethod时,以下代码失败.任何人都可以找出我做错了什么吗?
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
int main(int iArgCnt, char ** argv)
{
HRESULT hres;
// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hres << endl;
return 1; // Program has failed.
}
// Step 2: --------------------------------------------------
// Set general COM security levels --------------------------
// Note: If you are …Run Code Online (Sandbox Code Playgroud)