I wan’t to kill a process by it’s path. But when I use this code I get a win32Exception.
Only part of a ReadProcessMemory or WriteProcessMemory request was completed
My changed the target build to x64 but I still get the same error.
Process[] Processes = Process.GetProcessesByName("iw4");
if (Processes.Length >= 1)
{
for (int i = 1; i < Processes.Length; i++)
{
Process Process = Processes[i];
string processPath = Process.MainModule.FileName;
if (processPath == s + "\\iw4.exe")
{
if (!File.Exists(s + "\\localization.txt"))
{
Log.Data("killed process!");
Process.Kill();
}
}
}
}
Stack trace:
at System.Diagnostics.NtProcexssManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.Process.get_MainModule()
at LocalizationFix.Fix.checkLocalizationFile()
at LocalizationFix.Init.Main(String[] args)
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
The problem is not in the posted code. Its most likely in
LocalizationFix.Fix.checkLocalizationFile().The posted has an unrelated problem in that you are skipping the first entry in the process list. C# uses zero-relative indexing.
Maybe you want something like:
Also, by convention local variable names are lower Pascal cased. So use: