ใจใใๅป็ใปใณใฟใผใฎใฉใณใตใ ่ขซๅฎณ
ๆๅป็ใปใณใฟใผใงใฏใใฆใผใถใผใฎๅคใใซ็ฎก็่
ๆจฉ้ใไปไธใใฆใใใใใงใ
ใใฎใใใช็ฎก็ใฏใใใใใชไฝๅถ ใจ่กจ็พใใใใใใงใใญ
ในใใผใใชๆ ใทในใใ๏ผๅไบบ็่ฆ่งฃ๏ผ
็ฎก็่
ๆจฉ้ใใฐใๆใใใจใไธๆฆใซใใกใจใฏ่จใใพใใใ
ในใใผใใชๆ
ใทในใใใชใใใใใชใใจใใพใใใใญ
้ใใใใฆใผใถใผใซใ ใใ็ฎก็่ ๆจฉ้ใไธใใ ใฎใในใใผใใชๆ ใทในใใใงใโจ
ๆ ใทในใใใฎ่ฆๆฉใ๏ฝ็ฎก็่ 1ไบบ vs ่จๅคงใช็ซฏๆซ๏ฝ
ใงใฏใใชใๅบใๅคใใฎใฆใผใถใผใซ็ฎก็่
ๆจฉ้ใไธใใใใจใซใชใใฎใ๏ผ
ใใฎ็็ฑใฎ๏ผใคใฏใใใกใใกๆ
ใทในใใใๅบๅใใฆ็ซฏๆซๆไฝใใฆใใใชใใใใงใ
ใใจใใฐใใฝใใใฎใคใณในใใผใซใฏใ็ฎก็่ ๆจฉ้ใ็กใใจใงใใชใๆไฝใงใ
- ใฝใใใใคใณในใใผใซใใใไบบใ็พใใใใณใๆ ใทในใใใ็ซฏๆซใๆไฝใใซ่กใใพใ
- ใฝใใใใคใณในใใผใซใใไบบใใใใใใใฆใใๆ ใทในใใใฏ๏ผไบบใ๏ผไบบใงใ
- ๅคงใใชไผๆฅญใงใๆ ใทในใใใฏ๏ผ๏ผไบบใใใใงใ๏ผ่ฆๅบๅ ธ๏ผ
ใปใปใปไบบๆใ่ถณใใชใใงใใญ
ใใใใใใใฝใใใฎใคใณในใใผใซใฏ่ชๅใงใใฃใฆใใใใพใใใ๏ผ
ใจใใใใจใงใ็ฎก็่ ๆจฉ้ใๅ จใฆใผใถใผใซใฐใๆใใใจใซใชใใฎใงใ
ๆๅป็ใปใณใฟใผใฎๅฎๆ ใฏใใ็ฅใใใไธ้ใฎๆ ใทในใใใฏๅคงๅคใชใฎใงใ
ๆจๆบใฆใผใถใผใงใใฝใใใใคใณในใใผใซใงใใใใคใคใญ๐
ๆจๆบใฆใผใถใผใงใญใฐใคใณใใฆใใฆใใใฝใใใใคใณในใใผใซใใใจใใ ใ็ฎก็่ ๆจฉ้ใไฝฟใใใใใใงใใญ
ใใใชใใจใงใใใฎใงใใใใ๏ผ
ๆจๆบใฆใผใถใผใซใฏ็ฎก็่
ๆจฉ้ใฎใในใฏใผใใใใฌใฆใฏใใใพใใ
SYSTEMใฆใผใถใผ๏ผ็ฎก็่ ๆจฉ้ใใ๏ผใซใคใณในใใผใซใใใใ
Windowsใใทใณใงใฏใๅธธใซใใใฏใฐใฉใฆใณใใงใตใผใในใๅใใฆใใพใ
ใฆใผใถใผใฎ็ฎใงใฏ่ฆใใชใใจใใใงใใใฃใใจใตใผใในใฏๅใใฆใใพใ
ใตใผใในใฏๆจๆบใฆใผใถใผใใใๅผทใๆจฉ้ใงๅใใฆใใพใ
ใใใใฝใใใฎใคใณในใใผใซใใตใผใในใซไปปใใใใใใฎใ ๏ผ
Systemใขใซใฆใณใใฏๅผทๅใชๆจฉ้ใๆใคใใใๆปๆ่ ใซใตใผใในใฎ่ๅผฑ๏ผใใใใใ๏ผๆงใ็ชใใใฆไนใฃๅใใใ้ใ่ขซๅฎณใ็ๅคงใซใชใใใญใชใใงใใ่ชๅทฑ่ฒฌไปปใงใ้กใใใพใใ
ๅ ่ฒฌไบ้
ไปฅไธใฎใณใผใใงไฝใไธๅ ทๅใ่ตทใใฆใใ็งใฏไธๅใฎ่ฒฌไปปใใจใใพใใ
โ ๅบๆฌๆน้โ
ๆจๆบใฆใผใถใผใซใคใณในใใผใซใใฆใปใใใฝใใใฎใคใณในใใผใฉใผใ็จๆใใพใ
ใใใใใฎใsetup.exeใจใใใใกใคใซใงใ
ใใใWindowsๆจๆบใฝใใใงใใIExpressใงEXEๅใใพใ
๏ผไปฅไธใใฎEXEๅใใใใฎใใฉใใใคใณในใใผใฉใผใจๅผใณใพใ๏ผ
ใใฎใฉใใใคใณในใใผใฉใผใๆจๆบใฆใผใถใผใใใใซใฏใชใใฏใใใจใๆฌ็ฉใฎใคใณในใใผใฉใผ(setup.exe)ใ่ตทๅใใ็ฎๆฎตใงใ
ใปใญใฅใชใใฃใชในใฏใซใคใใฆ
่ชฐใงใsetup.exeใIExpressใงEXEๅใใใใไปปๆใฎsetup.exeใ่ตฐใใใใใจใใงใใฆใๆชๆใฎใใใฝใใใใฆใผใถใผใใคใณในใใผใซใใใชในใฏใใใใพใใญ
ใงใๅคงไธๅคซใงใ๏ผ
IExpressใไฝฟ็จใใใใใซใฏ็ฎก็่
ๆจฉ้ใๅฟ
่ฆใงใ
่ชฐใใๆงใใEXEๅใใใใจใฏใงใใชใ๏ผ๏ผใฉใใใคใณในใใผใฉใผใฏ็ฎก็่
ๆจฉ้ใงใใไฝใใชใ๏ผใใใซใชใฃใฆใใพใใฎใงใใใใงใปใญใฅใชใใฃใๆ
ไฟใใพใ
ๅ่: IExpressใไฝฟใฃใฆbatใใกใคใซใexeๅใใๆนๆณ
ใพใใๅพ่ฟฐใใพใใใใกใคใซใตใคใบใๅ ใซใใ็ฅ่ญๆๅทใใคใใฃใฆใๆชๆใใๆไฝใ้ฒใๆๆฎตใ่ใใฆใพใ
ใฉใใใคใณในใใผใฉใผใฎๅฎ่กๆนๆณ
ใฉใใใคใณในใใผใฉใผใๅฎ่กใใใจใๆฌ็ฉใฎใคใณในใใผใฉใผ(setup.exeใชใฉ)ใใฉใใใฎใใฉใซใใผใซ็ฝฎใใพใ
ใใฎใใฉใซใใผใใตใผใในใซ็ฃ่ฆใใใพใ
ใตใผใในใฏ็ฃ่ฆๅ
ใฎใใฉใซใใผใซๆฌ็ฉใฎใคใณในใใผใฉใผใ็ฝฎใใใใใใใใๅฎ่กใใพใ
ๆจๆบใฆใผใถใผใงใญใฐใคใณใใฆใใใจใใฆใใๆฌ็ฉใฎใคใณในใใผใฉใผใๅฎ่กใใใฎใฏใตใผใในใงใ
๏ผใตใผใในใฏ็ฎก็่
ๆจฉ้ใจๅใๅผทใๆจฉ้ใๆใฃใฆใใพใใฎใงใใคใณในใใผใฉใผใๅฎ่กใงใใพใ๏ผ
ใใฎใตใผใในใฏใฉใใใฃใฆใคใใใ๏ผ
ใปใปใปC#ใจC++ใง่ชไฝใใพใ๏ผ
ใตใผใในใไฝใ
ใใคใฏใญใฝใใใฎใใญใฅใกใณใใๅ่ใซใC#ใงใใญใฐใฉใ ใๆธใใพใ
ใใใใใdotnetใณใใณใใใคใณในใใผใซใใฆใใใพใใใ
ใณใใณใใใญใณใใใงdotnet --versionใๆใคใจใใผใธใงใณใ่กจ็คบใใใใฏใใงใ
dotnet --version
7.0.403
ใใจใฏใใใคใฏใญใฝใใใฎใใญใฅใกใณใใซใใใใฃใฆใใญใธใงใฏใใไฝๆใใพใ
ไฝๆใใใใจใฏใไธ่จใฎ้ใC#ใณใผใใๅคๆดใใฆใใ ใใ
C#ใณใผใ๏ผโถใๆผใใจๅฑ้ใใใ๏ผ
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-MyService-24f66dd5-0856-40e4-a83b-0086ec7054b5</UserSecretsId>
<OutputType>exe</OutputType>
<PublishSingleFile Condition="'$(Configuration)' == 'Release'">true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PlatformTarget>x64</PlatformTarget>
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
</ItemGroup>
</Project>
using MyService;
using Microsoft.Extensions.Logging.Configuration;
using Microsoft.Extensions.Logging.EventLog;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddWindowsService(options => options.ServiceName = ".NET Joke Service");
LoggerProviderOptions.RegisterProviderOptions<
EventLogSettings, EventLogLoggerProvider>(builder.Services);
builder.Services.AddHostedService<Worker>();
IHost host = builder.Build();
host.Run();
namespace MyService;
using System;
using System.IO;
using System.Runtime.InteropServices;
public class Worker : BackgroundService
{
[DllImport("Dll1.dll")]
public static extern void CallProc();
private readonly ILogger<Worker> _logger;
private readonly string _flgFileName = "a.flg";
private readonly string _exeFileName = "a.exe";
public Worker(ILogger<Worker> logger) => _logger = logger;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
string aflg = Path.Combine("c:/Temp", _flgFileName);
string aexe = Path.Combine("c:/Temp", _exeFileName);
try
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
if (Path.Exists(aflg))
{
_logger.LogWarning("flag file exists");
var file = new FileInfo(aexe);
long size = file.Length;
_logger.LogInformation("file size1: {0} bytes", size);
using (var sr = new StreamReader(aflg))
{
string line = sr.ReadLine();
if (long.TryParse(line, out long s))
{
_logger.LogInformation("file size*2: {0} bytes", s);
// โ
flgใใกใคใซใฎๅ
ๅฎนใๆญฃๅฝใงใชใใใฐ
// ๆชๆใใๆไฝใจใฟใชใใฆใใคใณในใใผใฉใผใๅฎ่กใใใชใ
if (size * 2 == s)
{
CallProc();
}
}
}
File.Delete(aflg);
_logger.LogInformation("flag file deleted");
}
else if (Path.Exists(aexe))
{
try
{
File.Delete(aexe);
_logger.LogInformation("exe file deleted");
}
catch (UnauthorizedAccessException)
{
_logger.LogInformation("exe file access denied");
}
catch (IOException)
{
_logger.LogInformation("exe file in use");
}
}
_logger.LogInformation("wait five minutes");
await Task.Delay(5000, stoppingToken);
}
}
catch (TaskCanceledException)
{
}
catch (Exception ex)
{
_logger.LogError(ex, "{Message}", ex.Message);
Environment.Exit(1);
}
}
}
ใตใผใในใWindowsใใทใณใงๅใใ
ใณใผใใๆธใใใใใใญใฐใฉใ ใ็บ่ก(publish)ใใพใใใ
ใใใใใCใใฉใคใ็ดไธใซTempใใฉใซใใไฝใฃใฆใใใฆใใ ใใใญ
dotnet publish --output "C:\Temp\publish"
ใใญใฐใฉใ ใ็บ่กใใใใใตใผใในใซ็ป้ฒใใพใใใ
ใณใใณใใใญใณใใใ็ฎก็่
ๆจฉ้ใง้ใใฆใไธใฎ๏ผ่กใๅฎ่กใใพใ
sc.exe create ".NET Joke Service" binpath="C:\Temp\publish\MyService.exe"
net start ".NET Joke Service"
็กไบใซใตใผใในใ่ตทๅใใใใฉใใใฏใใตใผใในใ่ฆใใฐใใใใพใ
ในใฟใผใใขใใใฎ็จฎ้กใ่ชๅใซใใฆใใใพใใใ๏ผๅณใฏใชใใฏใงๅคๆดใงใใพใ๏ผ
ใใฝใณใณใ่ตทๅใใใจใใซ่ชๅ็ใซใตใผใในใ้ๅงใใใใใซใชใใพใ
C++ใฎใณใผใใๅฟ ่ฆใชใใงใ
C#ใฎใณใผใใใใฏC++ใฎใณใผใใๅผใใงใใพใ
CallProc()้ขๆฐใงใ
้ขๅใใใใงใใใC++ใฎใณใผใใใใซใใใฆpublishใใฉใซใใซ็ฝฎใใฆใใ ใใ
C++ใณใผใ๏ผโถใๆผใใจๅฑ้ใใใ๏ผ
#include <windows.h>
#include <string>
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
extern "C" __declspec(dllexport) void __stdcall CallProc();
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
BOOL createProcessAsUser(const std::wstring &app, const std::wstring ¶m, HANDLE token, DWORD creationFlags)
{
wchar_t arg[MAX_PATH] = L"";
wcscpy_s(arg, (param.empty() ? app.c_str() : (app + L" " + param).c_str()));
WCHAR tmp[64] = L"winsta0\\default";
STARTUPINFO si = {sizeof(STARTUPINFO), nullptr, tmp};
PROCESS_INFORMATION pi = {};
const BOOL retval = CreateProcessAsUser(token, nullptr, arg, nullptr, nullptr, FALSE, creationFlags, nullptr, nullptr, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return retval;
}
void __stdcall CallProc()
{
DWORD dwSesId = ::WTSGetActiveConsoleSessionId();
DWORD currentProcessId = GetCurrentProcessId();
std::cout << "currentProcessId: " << currentProcessId << std::endl;
HANDLE hProcess = OpenProcess(MAXIMUM_ALLOWED, false, currentProcessId);
HANDLE hPToken = NULL;
if (!OpenProcessToken(hProcess, TOKEN_DUPLICATE, &hPToken))
{
std::cout << "err1" << std::endl;
CloseHandle(hProcess);
return;
}
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
HANDLE hUserTokenDup = NULL;
if (!DuplicateTokenEx(hPToken, MAXIMUM_ALLOWED, &sa, SecurityIdentification, TokenPrimary, &hUserTokenDup))
{
std::cout << "err2" << std::endl;
CloseHandle(hProcess);
CloseHandle(hPToken);
return;
}
STARTUPINFO si = {0};
si.cb = sizeof(si);
DWORD creationFlags = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS;
BOOL _ = SetTokenInformation(hUserTokenDup, TokenSessionId, &dwSesId, sizeof(DWORD));
BOOL retval = createProcessAsUser(L"c:\\Temp\\a.exe", L"", hUserTokenDup, creationFlags);
std::cout << "retval:" << retval << std::endl;
}
[DllImport("Dll1.dll")]
public static extern void CallProc();
DLLใใกใคใซใไฝใฃใฆใpublishใซใณใใผใใพใ
ใณใผใใๆธใใใใDll1.dllใจใใๅๅใงๅฎ่กใใกใคใซใไฝใใพใ
ไฝใฃใใใกใคใซใฏC:\Temp\publishใซๆใงใณใใผใใฆใใ ใใ
g++ dllmain.cpp -o Dll1.dll -shared -DUNICODE
ใใg++ใณใใณใใไฝฟใใชใๅ ดๅใฏใไธ่จใฎใตใคใใชใฉใๅ่ใซใใพใใใ
ใชใC++ใไฝฟใใฎใ๏ผ
C#ใ ใใงๅฎ็ตใใชใใฎใ๏ผ
ใปใใทใงใณ 0 ๅ้ข | Windows 7ใจใใใตใคใๆงใใ๏ผๆฎต่ฝๅผ็จใใพใ
ใปWindows 7ใงใฏใใญใปในใใจใซใปใใทใงใณ ID ใๅฒใๅฝใฆใใใพใใใใตใผใในใใทในใใ ใจใใฆ่ตทๅใใใใญใปในใฏ ใปใใทใงใณ ID =0 ใจใใฆ่ตทๅใใพใใไธๆนๅใฆใผใถใ่ตทๅใใใใญใปในใฏ ใปใใทใงใณ ID =1ไปฅไธใจใใฆ่ตทๅใใพใใ
ใพใใปใใทใงใณ 0 ใฏใฆใผใถใคใณใฟใผใใงใผใน(Windows ใฎใใใใขใใ็ป้ขใชใฉ๏ผใ่กจ็คบใใใใใจใฏๅบๆฅใชใใชใใพใใใใใฃใฆใตใผใในใใญใฐใฉใ ใใฆใผใถใซใใใใขใใ็ป้ขใ่กจ็คบใใใใจใฏๅบๆฅใชใใชใใพใใใ
ใตใผใในใ่ตทๅใใใใญใปในใฏใ็ป้ขใ่กจ็คบใใใชใใฎใงใใญ
๏ผๅฎ้ใซใใฃใฆใฟใพใใใใใฟในใฏใใใผใธใฃใผใซใใญใปในใฏใใใใฎใฎใ็ป้ขใฏใใใใซ่กจ็คบใใใพใใใงใใ๏ผ
็ป้ขใ่ฆใใชใใจใฆใผใถใผใฏๅพ็ถใฎใคใณในใใผใซไฝๆฅญใใงใใพใใ
็ป้ขใ่กจ็คบใใใใใซใฏใใฆใผใถใผใปใใทใงใณใงใคใณในใใผใฉใผใๅฎ่กใใๅฟ
่ฆใใใ
ใใฎ้ขๆฐใ็ฐกๅใซๆไพใใฆใใใใฎใC++ ใ ใฃใใฎใงใไปๅC++ใไฝฟใใพใใ
ๅ่ใชใณใฏใงใฏC#ใงๅๆฉ่ฝใๅฎ็พใใฆใใไพใใใใพใใ
็งใฎใใญใฐใฉใใณใฐในใญใซใงใฏC#ใงใฎๅฎ่ฃ
ใฏ้ฃใใใฃใใงใ
้ทใใชใใพใใใใไปฅไธใไปๅC++ใไฝฟใฃใ็็ฑใงใ
ใใจไธๆฏใๆฌ็ฉใคใณในใใผใฉใผใใฉใใใใEXEใใคใใใพใ
IExpressใงๆฌ็ฉใคใณในใใผใฉใผใจใณใใณใใใกใคใซใใฉใใใใพใ
ๆจๆบใฆใผใถใผใใใใซใฏใชใใฏใใๅฏพ่ฑกใจใชใใฉใใใคใณในใใผใฉใผใใคใใๅทฅ็จใงใ
IExpressใงEXEใใกใคใซใไฝใฃใฆใใใฎEXEใใใใใจ
ใใฎไธญใซใใๆฌ็ฉใฎใคใณในใใผใฉใผ(a.exe)ใๅฎ่กใใใ
ใจใใ็ฎๆฎตใงใ
CMDใณใผใ๏ผโถใๆผใใจๅฑ้ใใใ๏ผ
@REM 2023.10
echo "IEXPRESS: extract the installer"
powershell sleep 1
if exist c:\Temp\a.flg (
echo flg file exists, exit
powershell sleep 1
exit
)
if exist c:\Temp\a.exe (
echo exe file exists, exit
powershell sleep 1
exit
)
copy a.exe c:\Temp\
copy a.flg c:\Temp\
@REM powershell (Get-Item a.exe).Length > c:\Temp\a.flg
@REM type nul > %TEMP%\a.flg
echo "IEXPRESS: finish to 1 sec"
powershell sleep 1
@REM REM pause
ๅ
ใซไฝใใคใณในใใผใฉใผใๅใใฆใใชใใใflgใใกใคใซใฎๆ็กใง็ขบ่ชใใพใ
ใคใณในใใผใฉใผใฏ๏ผใคใใคๅฎ่กใใฆใใใๅฟ
่ฆใใใใพใ
ๆชๆใฎใใ่กๅใธใฎๅฏพๅฆ
flgใใกใคใซใซใฏใใใใใ็ฎก็่
ใใใฃใใ
ใคใณในใใผใฉใผใตใคใบใฎ2ๅใฎๅคใๆธใ่พผใใงใใใพใ
ใใใฏใคใณในใใผใฉใผใ็ขบใใซIExpressใงๅ ใใ ใคใณในใใผใฉใผใงใใใใจใ็ขบใใใใใใฎๅฎๅ จ็ขบ่ชใงใ
C#ใตใผใในใงใใๅๆงใซใคใณในใใผใฉใผใฎใใกใคใซใตใคใบใ็ขบ่ชใ
ใใฎ2ๅใฎๅคใflgใใกใคใซใฎๅ
ๅฎนใจๅ่ดใใใใจใ็ขบ่ชใใพใ
ๆชๆใๆใฃใๆจๆบใฆใผใถใผใใใตใผใในใฎ็ฃ่ฆใใฉใซใใซใคใณในใใผใฉใผ๏ผsetup.exeใฎใใใชใใฎ๏ผใจflgใใกใคใซใ็ฝฎใใใใใใพใใ
ใตใผใในใฏ็ฃ่ฆๅฏพ่ฑกใใฉใซใใซใคใณในใใผใฉใผใใใใฐๅฎ่กใใพใ
ใใฎๆใซใใใฉใฐใใกใคใซใฎไธญ่บซใใคใณในใใผใฉใผใตใคใบใฎ2ๅใงใชใๅ ดๅใฏ
ใคใณในใใผใฉใผใ็ ดๆฃใใพใ๏ผ๏ผ
ใใฎใใใชไปๆใใๅ ฅใใฆใใใใจใงใๆไฝๆฅญใซใใใคใณในใใผใฉใผใฎ้ ็ฝฎใ็กๅนใซใใพใ
ใใกใใใใฎNๅใฏ็ฎก็่ ใ ใใงๅ ฑๆใในใ็งๅฏไบ้ ใงใ
ใกใใใจใใใปใญใฅใชใใฃ
้ปๅญ็ฝฒๅใใ้ตๆๅทใชใฉใงใฌใใใชใจๆญฃๅฝใชใคใณในใใผใฉใผใๅคๅฅใใใฐใใๅฎๅ
จใงใใ
ใใใชๅคง้ใๆฏใใใชใใจใใใใใกใคใซใตใคใบใฎNๅใฎๅคใflgใซๆธใ่พผใพใใฆใใใใใใใฎ
็ดๆใ ใใงใใฒใจใพใใฏไบบ้ใฎ่ณๅ
ใใญใปใใตใงใฏ็ ดใใชใใใใใฎใปใญใฅใชใใฃใฏใคใใใพใ
// ๅ
ใฎใใกใคใซใตใคใบใฎ2ๅใฎๅคใ flg ใใกใคใซใซๆธใ่พผใพใใฆใใใ
// C++ใฎๅฆ็ใซ็งปๅใใๅฎ้ใซใคใณในใใผใซไฝๆฅญใๅฎๆฝใใ
if (size * 2 == s)
{
CallProc();
}
// ็ฐกๅใฎใใใซ2ๅใๆก็จใใใใ17ๅใ ใใใใ8ๅใใฆ2ใใคใในใใๅคใงใใใ
// ใใ ใใๅฐๆฐใฎๆฑใใใใ่ฝใกใชใฉใซๆณจๆใใใใจ
ๅไฝ็ขบ่ช
- ็ฎก็่ ใงใตใผใในใ่ตทๅใใพใ
- ๆจๆบใฆใผใถใผใซๅใๆฟใใพใ
- ๆจๆบใฆใผใถใผใงใฉใใใคใณในใใผใฉใผ(.EXE)ใใใใซใฏใชใใฏใใพใ
-
C:\Tempใซa.exeใจa.flgใ็ๆใใใพใ - ใตใผใในใ
a.flgใฎไธญ่บซใจa.exeใฎใใกใคใซใตใคใบใๆฏ่ผใใa.exeใฎ็ๆญฃๆงใ็ขบ่ชใใพใ - ใตใผใในใ็ฎก็่
ๆจฉ้ใง
a.exeใๅฎ่กใใพใ - ใคใณในใใผใฉใผใ่ตทๅใใใฎใงใใใจใฏๆจๆบใฆใผใถใผใGUIใใๆไฝใใใคใณในใใผใซไฝๆฅญใ้ฒใใพใ
- ไปฅไธ๏ผ
ใตใผใในใ่ชๅ่ตทๅใใฆใใใฐใๆ้ 1ใฏไธ่ฆใงใ
ใใทใณใๅ่ตทๅใใใฐๅๆใซใตใผใในใ็ซใกไธใใฃใฆใใ็ถๆ
ใชใฎใง
ๆ
ใทในใใใฏใฉใใใคใณในใใผใฉใผใๆจๆบใฆใผใถใผใซๆธกใใฆใใใใ ใใงใๆฎใใฎใคใณในใใผใซไฝๆฅญใฏ
ๅธธ้งใตใผใในใจใฆใผใถใผๆไฝใ ใใงๅฎ็ตใใพใ
ๅพ็ไปใ
ใตใผใในใๅๆญขใใฆใใตใผใในใชในใใใ้คๅใใพใใใ
net stop ".NET Joke Service"
sc.exe delete ".NET Joke Service"
ใใใใซ
ใใใC#ใจC++ใๆธใใฐ
ๆจๆบใฆใผใถใผใซใคใณในใใผใซไฝๆฅญใๅงไปปใงใใใใ
ใจใใใใจใใใใใพใใ
ใใใใใชในใฏใงใฏใชใใ๏ผใใชใฉใณใกใณใใๅพ ใกใใฆใใใพใ๏ผ
ใในใฆใฎๆ ใทในใใใใใใใงใๆฉใใใใกใซๅธฐใใพใใใใซ๏ผ
ๅ่ใชใณใฏ
ใไธ่ฉฑใซใชใใพใใ
- Visual Studio Code ใไฝฟ็จใใฆ .NET ใณใณใฝใผใซ ใขใใชใฑใผใทใงใณใไฝๆใใ
- SystemใปใใทใงใณใใใUserใปใใทใงใณใงใขใใชใ่ตทๅใใโ
- SystemใปใใทใงใณใใใUserใปใใทใงใณใงใขใใชใ่ตทๅใใโก
- C#ใใๅผใณๅบใใC++ใฎ้ขๆฐใฎไฝๆใจใใใใๅผใณๅบใๆนๆณ
- ใปใใทใงใณ 0 ๅ้ข | Windows 7
- how to "use unicode character set" in g++?
ๅ็จใฝใใ
ใใฎ่จไบใฎใใใชใคใณใใญๆๆณใฏ็คพๅ
็จ่ญฐใ้ใใใใชใ๏ผ
ใจใใๅ ดๅใฏใใ้ใง่งฃๆฑบใใพใใใ
ไป้ฒ
CreateProcessAsUserใฏUNICODEใฎไฝฟ็จ/ไธไฝฟ็จใซใใฃใฆๅฎ่ฃ
ใๅคใใใใใงใ
ๆซๅฐพAใจWใงๅใใใพใ
ไปๅใฎใใใชๆฅๆฌ่ชใไฝฟใใชใใในใใไฝฟใใชใใฎใงใใใฐ
ๆซๅฐพAใฎใปใใใทใณใใซใงๆฑใใใใใฎใงใใใใใ
ใใใฏไปๅพใฎ่ชฒ้กใจใใใใจใงใ
CreateProcessAsUserA(
_In_opt_ HANDLE hToken,
_In_opt_ LPCSTR lpApplicationName,
_Inout_opt_ LPSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOA lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
#ifdef UNICODE
#define CreateProcessAsUser CreateProcessAsUserW
#endif
CreateProcessAsUserW(
_In_opt_ HANDLE hToken,
_In_opt_ LPCWSTR lpApplicationName,
_Inout_opt_ LPWSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCWSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOW lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
| ้ขๆฐ | Typedef | ๅฎ็พฉ |
|---|---|---|
ๆซๅฐพA
|
LPCSTR | const char* |
ๆซๅฐพW
|
LPCWSTR | const wchar_t* |
็ณธๅฌไบ๏ผ๏ผ
่ฟฝ่จ(2024.02.13)
-
a.exeใงใฏใชใใใใใใกใคใซใ็ฎก็่ ๆจฉ้ใงๅฎ่กใใใๅ ดๅใฏใa.exeใa.batใง็ฝฎๆใใ -
a.batใฎใใกใคใซใตใคใบใใใญใใใฃใง็ขบ่ชใใฆใใใฎๅใฎๅคใa.flgใซๆธใ่พผใใงใใ -
a.batๅฎ่กๆใ้ปใDOS็ชใ้ใใฆใใใซ้ใใฆใใพใใจใใฆใผใถใผใใใใ๏ผไปๅใใใใช๏ผใใจๆธๆใฃใฆใใพใใฎใงใa.batใฎๆซๅฐพใซpauseใๅ ฅใใฆใใใจ่ฆชๅ๐
PINGๅฟ็ญใซๅฟใใฆbatใใกใคใซใฎๅฆ็ใๅๅฒใใ
ใใจใใฐ็ฃ่ฆๅฏพ่ฑกใฎใในใใใPINGๅฟ็ญใใใฃใๅ ดๅใซใฎใฟไฝใใฎๅฆ็ใใใๅ ดๅ
:erroroutใฎใจใใใซPINGๅฟ็ญใใใฃใๅ ดๅใฎๅฆ็ใๆธใ
@echo off
set COUNT=0
:error
set /a COUNT=COUNT+1
echo COUNTDOWN ... %COUNT%/3
if "%COUNT%" == "3" goto errorout
ping -n 1 192.168.10.1 | find "ms TTL=" > NUL
if ERRORLEVEL 1 goto notrespond
timeout /t 5 > nul
goto error
:notrespond
echo (PING ERROR) CANNOT RESTART HOST
goto end
:errorout
echo (OK) RESTART 192.168.10.1
:end
echo ---END---
pause

Comments
่ๅณๆทฑใใงใใ
ไปใฏ5
ๅ็ง้้ใงใใผใชใณใฐใใฆใใใใใชใใใจๆใใพใใใFileSystemWatcher ใฏใฉใน (System.IO)ใไฝฟใใใใ็ฅใใพใใใ@tenmyo
ใณใกใณใใใใใจใใใใใพใใ
ใใคใฏใญใฝใใใฎใตใณใใซใ
whileใจawait Task.Delay()ใฎ็ตใฟๅใใใ ใฃใใใ็นใซๆทฑใ่ใใ่ธ่ฅฒใใพใใใใใๆๆใฎ
watcherใไฝฟใฃใๆนๆณใฎใปใใใใใใใงใใญใจใใใใจใงใใถใถใฃใจๆธใใฆใฟใใฎใงใใใๅใใ๏ผพ๏ผพ๏ผ
ๅใชใใฑใขใฌในใในใชใฎใใใใใพใใใใใใๅฐใใกใใใจ่ชฟในใชใใจใงใ
ไปฅไธใๅพก็คผใจใใใใใๅ ฑๅใพใง
่ฉณใใใชใใฎใงใใ
using var watcherใ ใจไฝใฃใฆๅณ่งฃๆพใใฆใพใใใในใณใผใๅ ใงใฏ็ใ็ถใใพใใใใณใณในใใฉใฏใฟๆใใใ็ ดๆฃใใใฆใใใงใใญ
ใใณใใใใใจใใใใใพใ๏ผ
Console.ReadLine()ใงใใญใใญใณใฐใใฆใใใฎใใปใปใปJokeService ใฏๅ้คใใฆใใใใชใใงใใโฆโฆ๏ผ
๐ใใใพใใฃใจไธ่ฆใงใใญใใๆๆใใใใจใใใใใพใ๏ผ
builder.Services.AddSingleton();
ใใผใงใใใใผใงใใ
ใๆๆ้จๅใๅ้คใใพใใ
ใจใใๅป็ๆณไบบใฎๆ ใทในใงใใใจใฆใ่ๅณๆทฑใ่จไบใๆ่ฆใใใใพใใใๆ่ฌ็ณใไธใใพใใๅฎ้ใซ่ฉฆใใฆใฟใใจใใใๅฎ่ก็ฐๅขใงใฏไพๅญใใฆใใDLLใใชใใใใตใผใในใ่ตทๅใใชใใฎใง้็ใชใณใฏใๅฟ ่ฆใจๆใใพใใ
g++ dllmain.cpp -o Dll1.dll -shared -DUNICODE
ใใใใใใใใใใโ
g++ dllmain.cpp -o Dll1.dll -static -lstdc++ -lgcc -lwinpthread -shared -DUNICODE
โปใใกใใฎ่จไบใๅ่ใซใใใฆใใใ ใใพใใใsiunใใใซใๆ่ฌ็ณใไธใใพใใ
https://siuncyclone.hatenablog.com/entry/2018/07/21/194629
Let's comment your feelings that are more than good