C# 我希望它在单独打开exe文件时关闭 我有两个exe文件,用C和C++编码。我想做的是下载和运行用C++从C++编码的exe。当C++应用程序不从C应用程序中带来时,我不希望它直接从下载的文件夹中启动。我如何做到这一点?< p>当启动C++应用程序时,c++

C# 我希望它在单独打开exe文件时关闭 我有两个exe文件,用C和C++编码。我想做的是下载和运行用C++从C++编码的exe。当C++应用程序不从C应用程序中带来时,我不希望它直接从下载的文件夹中启动。我如何做到这一点?< p>当启动C++应用程序时,c++,c#,c++,C#,C++,我希望它在单独打开exe文件时关闭 我有两个exe文件,用C和C++编码。我想做的是下载和运行用C++从C++编码的exe。当C++应用程序不从C应用程序中带来时,我不希望它直接从下载的文件夹中启动。我如何做到这一点?< p>当启动C++应用程序时,c++应用程序可以通过命令行参数。如果C++应用程序没有看到这个参数,它可以立即终止它自己而不做任何其他事情。 Process.Start(@“c:\path to\cpp.exe”,“-startedByCSharpApp”); #包括 bool

我希望它在单独打开exe文件时关闭 <>我有两个exe文件,用C和C++编码。我想做的是下载和运行用C++从C++编码的exe。当C++应用程序不从C应用程序中带来时,我不希望它直接从下载的文件夹中启动。我如何做到这一点?

< p>当启动C++应用程序时,c++应用程序可以通过命令行参数。如果C++应用程序没有看到这个参数,它可以立即终止它自己而不做任何其他事情。
Process.Start(@“c:\path to\cpp.exe”,“-startedByCSharpApp”);
#包括
bool startedByCSharpApp(int argc,char*argv[])
{
对于(int i=1;i

另一个选择是让C++应用程序调用和/或运行运行过程的列表来寻找自身和C应用程序。看见如果两者都找不到,或者C#应用程序的进程ID与其自身进程的

th32ParentProcessID
不匹配,它可以立即终止自身

#包括
#包括
#包括
#包括
bool startedByCSharpApp()
{
HANDLE hprocessnap=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
if(hprocessnap==无效的句柄值)
返回false;
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
如果(!Process32First(HPProcessSnap和pe32))
{
CloseHandle(hProcessSnap);
返回false;
}
DWORD MyProcessId=GetCurrentProcessId();
DWORD MyParentProcessId=0;
std::载体CSharpAppPIDs;
做
{
if(pe32.th32ProcessID==MyProcessId)
{
MyParentProcessId=pe32.th32ParentProcessID;
}
else if(_tcscmp(pe32.szExeFile,“csharp.exe”)==0)
{
csharpappids.push_back(pe32.th32ProcessID);
}
}
while(Process32Next(hprocessnap,&pe32));
CloseHandle(hProcessSnap);
如果(MyParentProcessId!=0)
return(std::find(CSharpAppPIDs.begin()、CSharpAppPIDs.end()、MyParentProcessId)!=CSharpAppPIDs.end();
返回false;
}
int main()
{
如果(由CSharpApp()启动)
{
//这里的正常运作。。。
}
返回0;
}
<代码>应用程序在启动C++应用程序时,可以通过命令行参数。如果C++应用程序没有看到这个参数,它可以立即终止它自己而不做任何其他事情。
Process.Start(@“c:\path to\cpp.exe”,“-startedByCSharpApp”);
#包括
bool startedByCSharpApp(int argc,char*argv[])
{
对于(int i=1;i

另一个选择是让C++应用程序调用和/或运行运行过程的列表来寻找自身和C应用程序。看见如果两者都找不到,或者C#应用程序的进程ID与其自身进程的

th32ParentProcessID
不匹配,它可以立即终止自身

#包括
#包括
#包括
#包括
bool startedByCSharpApp()
{
HANDLE hprocessnap=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
if(hprocessnap==无效的句柄值)
返回false;
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
如果(!Process32First(HPProcessSnap和pe32))
{
CloseHandle(hProcessSnap);
返回false;
}
DWORD MyProcessId=GetCurrentProcessId();
DWORD MyParentProcessId=0;
std::载体CSharpAppPIDs;
做
{
if(pe32.th32ProcessID==MyProcessId)
{
MyParentProcessId=pe32.th32ParentProcessID;
}
else if(_tcscmp(pe32.szExeFile,“csharp.exe”)==0)
{
csharpappids.push_back(pe32.th32ProcessID);
}
}
while(Process32Next(hprocessnap,&pe32));
CloseHandle(hProcessSnap);
如果(MyParentProcessId!=0)
return(std::find(CSharpAppPIDs.begin()、CSharpAppPIDs.end()、MyParentProcessId)!=CSharpAppPIDs.end();
返回false;
}
int main()
{
如果(由CSharpApp()启动)
{
//这里的正常运作。。。
}
返回0;
}

很遗憾,我对你说的话一无所知。你有机会写一个示例代码吗?你到底不清楚什么?您以前从未使用过命令行参数吗?或者以前调用过任何Win32 API函数?是的,我从未调用过我不知道不幸的是,我是新手:(有视频样本吗?或者我可以在上面搜索什么googlede@LOVEBACK我更新了我的答案不幸的是,我没有关于你所说的内容的信息。你有机会写一个示例代码吗?你到底不清楚什么?你以前从未使用过命令行参数吗?或者以前调用过任何Win32 API函数吗?是的,我从未调用过我不知道,不幸的是,我是新来的:(有视频样本吗?或者我可以在上面搜索什么googlede@LOVEBACK我更新了我的答案。你可以通过md5/sha散列来完成。你的c#存储你将下载的文件的散列,并将其与你下载的destiny文件的散列进行比较。如果散列匹配,则没有理由(根据你的逻辑)为了不执行C++ exe文件,可以通过MD5/SHAHash来完成这个操作。你的C存储了你下载的文件的哈希值,并将它与你下载的命运文件的哈希值进行比较。如果哈希匹配,没有理由(根据你的逻辑)不执行C++ exe文件。