我希望它在单独打开 exe 文件时关闭
Posted
技术标签:
【中文标题】我希望它在单独打开 exe 文件时关闭【英文标题】:I want it to close when it opens the exe file separately 【发布时间】:2021-04-14 22:24:51 【问题描述】:我有两个用 C# 和 C++ 编码的 exe 文件。我想要做的是从 C# 下载并运行用 C++ 编码的 exe。当 C++ 应用程序不是从 C# 应用程序中获取时,我不希望它直接从下载的文件夹中启动。我该怎么做?
【问题讨论】:
你可以通过 md5/sha hash 来做到这一点。您的 c# 存储您将下载的文件的哈希值,并将其与您已下载的命运文件的哈希值进行比较。如果哈希匹配,则没有理由(根据您的逻辑)不执行 c++ exe 文件 【参考方案1】:C# 应用程序可以在启动 C++ 应用程序时传递命令行参数。如果 C++ 应用程序没有看到该参数,它可以立即终止自身而无需执行任何其他操作。
Process.Start(@"c:\path to\cpp.exe", "-startedByCSharpApp");
#include <string.h>
bool startedByCSharpApp(int argc, char* argv[])
for(int i = 1; i < argc; ++i)
if (strcmp(argv[i], "-startedByCSharpApp") == 0)
return true;
return false;
int main(int argc, char* argv[])
if (startedByCSharpApp(argc, argv))
// normal operations here ...
return 0;
另一种选择是让 C++ 应用程序调用 CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)
和 Process32First()
/Process32Next()
来遍历正在运行的进程列表以查找自身和 C# 应用程序。见Taking a Snapshot and Viewing Processes。如果两者都没有找到,或者如果 C# 应用的进程 ID 与它自己的进程的 th32ParentProcessID
不匹配,它可以立即终止自身。
#include <tlhelp32.h>
#include <tchar.h>
#include <vector>
#include <algorithm>
bool startedByCSharpApp()
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return false;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
if (!Process32First(hProcessSnap, &pe32))
CloseHandle(hProcessSnap);
return false;
DWORD MyProcessId = GetCurrentProcessId();
DWORD MyParentProcessId = 0;
std::vector<DWORD> CSharpAppPIDs;
do
if (pe32.th32ProcessID == MyProcessId)
MyParentProcessId = pe32.th32ParentProcessID;
else if (_tcscmp(pe32.szExeFile, "csharp.exe") == 0)
CSharpAppPIDs.push_back(pe32.th32ProcessID);
while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
if (MyParentProcessId != 0)
return (std::find(CSharpAppPIDs.begin(), CSharpAppPIDs.end(), MyParentProcessId) != CSharpAppPIDs.end());
return false;
int main()
if (startedByCSharpApp())
// normal operations here ...
return 0;
【讨论】:
很遗憾,我不知道您所说的内容。你有机会写一个示例代码吗? 您有什么不清楚的地方?您以前从未使用过命令行参数吗?或者之前调用过任何 Win32 API 函数? 是的,我从来没有打电话我不知道不幸的是我是新人:( 有示例视频吗?或者我可以在 googlede 上搜索什么 你好,现在我需要相反的我想用 c++ 启动 c# 应用程序我的 c# 应用程序不会运行,除非它在 c++ 应用程序中启动以上是关于我希望它在单独打开 exe 文件时关闭的主要内容,如果未能解决你的问题,请参考以下文章