1

我不想通过它的路径杀死一个进程。但是当我使用这段代码时,我得到了一个 win32Exception。

仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分

我将目标构建更改为 x64,但仍然出现相同的错误。

 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();
            }
        }
    }
 }

堆栈跟踪:

   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()
4

1 回答 1

1

问题不在发布的代码中。它最有可能在LocalizationFix.Fix.checkLocalizationFile().

发布的有一个不相关的问题,因为您正在跳过进程列表中的第一个条目。C# 使用零相对索引。

也许你想要类似的东西:

foreach (var Process in Process.GetProcessesByName("iw4");
{
   ...
}

此外,按照惯例,局部变量名称是小写的 Pascal 大小写。所以使用:

foreach (var process in Process.GetProcessesByName("iw4");
{
   ...
}
于 2013-01-27T01:00:14.980 回答