mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-06-30 11:01:50 +08:00
[feat] add Windows secure desktop remote unlock support for locked sessions, refs #77
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
#include <Windows.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "service_host.h"
|
||||
|
||||
namespace {
|
||||
|
||||
std::wstring GetExecutablePath() {
|
||||
wchar_t path[MAX_PATH] = {0};
|
||||
DWORD length = GetModuleFileNameW(nullptr, path, MAX_PATH);
|
||||
if (length == 0 || length >= MAX_PATH) {
|
||||
return L"";
|
||||
}
|
||||
return std::wstring(path, length);
|
||||
}
|
||||
|
||||
void PrintUsage() {
|
||||
std::cout << "CrossDesk Windows service skeleton\n"
|
||||
<< " --service Run under the Windows Service Control Manager\n"
|
||||
<< " --console Run the service loop in console mode\n"
|
||||
<< " --install Install the service for the current executable\n"
|
||||
<< " --uninstall Remove the installed service\n"
|
||||
<< " --start Start the installed service\n"
|
||||
<< " --stop Stop the installed service\n"
|
||||
<< " --sas Ask the service to send Secure Attention Sequence\n"
|
||||
<< " --ping Ping the running service over named pipe IPC\n"
|
||||
<< " --status Query runtime status over named pipe IPC\n";
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
crossdesk::CrossDeskServiceHost host;
|
||||
|
||||
if (argc <= 1) {
|
||||
PrintUsage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string command = argv[1];
|
||||
if (command == "--service") {
|
||||
return host.RunAsService();
|
||||
}
|
||||
if (command == "--console") {
|
||||
return host.RunInConsole();
|
||||
}
|
||||
if (command == "--install") {
|
||||
std::wstring executable_path = GetExecutablePath();
|
||||
bool success = !executable_path.empty() &&
|
||||
crossdesk::InstallCrossDeskService(executable_path);
|
||||
std::cout << (success ? "install ok" : "install failed") << std::endl;
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
if (command == "--uninstall") {
|
||||
bool success = crossdesk::UninstallCrossDeskService();
|
||||
std::cout << (success ? "uninstall ok" : "uninstall failed")
|
||||
<< std::endl;
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
if (command == "--start") {
|
||||
bool success = crossdesk::StartCrossDeskService();
|
||||
std::cout << (success ? "start ok" : "start failed") << std::endl;
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
if (command == "--stop") {
|
||||
bool success = crossdesk::StopCrossDeskService();
|
||||
std::cout << (success ? "stop ok" : "stop failed") << std::endl;
|
||||
return success ? 0 : 1;
|
||||
}
|
||||
if (command == "--sas") {
|
||||
std::cout << crossdesk::QueryCrossDeskService("sas") << std::endl;
|
||||
return 0;
|
||||
}
|
||||
if (command == "--ping") {
|
||||
std::cout << crossdesk::QueryCrossDeskService("ping") << std::endl;
|
||||
return 0;
|
||||
}
|
||||
if (command == "--status") {
|
||||
std::cout << crossdesk::QueryCrossDeskService("status") << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
PrintUsage();
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user