Commit fa532942 authored by Jeremy Kloth's avatar Jeremy Kloth Committed by Steve Dower

bpo-34980: P/Invoke QueryFullProcessImageName to get process names (GH-9901)

parent 4f399be0
...@@ -109,19 +109,34 @@ ...@@ -109,19 +109,34 @@
<FileName Required="true" /> <FileName Required="true" />
</ParameterGroup> </ParameterGroup>
<Task> <Task>
<Code Type="Fragment" Language="cs"> <Using Namespace="System.Diagnostics"/>
<Using Namespace="System.IO"/>
<Using Namespace="System.Runtime.InteropServices"/>
<Using Namespace="System.Text"/>
<Code Type="Method" Language="cs">
<![CDATA[ <![CDATA[
string fullPath = System.IO.Path.GetFullPath(FileName); [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
Log.LogMessage("Looking for " + fullPath, MessageImportance.Normal); public static extern bool QueryFullProcessImageName([In]IntPtr hProcess, [In]int dwFlags,
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses()) { [Out]StringBuilder lpExeName, ref int lpdwSize);
try { public override bool Execute() {
Log.LogMessage("Found running process: " + p.MainModule.FileName, MessageImportance.Low); string fullPath = Path.GetFullPath(FileName);
if (fullPath.Equals(System.IO.Path.GetFullPath(p.MainModule.FileName), StringComparison.OrdinalIgnoreCase)) { Log.LogMessage("Looking for " + fullPath, MessageImportance.Normal);
Log.LogMessage("Terminating " + p.MainModule.FileName, MessageImportance.High); foreach (Process p in Process.GetProcesses()) {
p.Kill(); try {
int pathLength = 32768;
StringBuilder pathBuilder = new StringBuilder(pathLength);
if (QueryFullProcessImageName(p.Handle, 0, pathBuilder, ref pathLength)) {
string exeName = Path.GetFullPath(pathBuilder.ToString());
Log.LogMessage("Found running process: " + exeName, MessageImportance.Low);
if (fullPath.Equals(exeName, StringComparison.OrdinalIgnoreCase)) {
Log.LogMessage("Terminating " + exeName, MessageImportance.High);
p.Kill();
}
}
} catch {
} }
} catch {
} }
return true;
} }
]]> ]]>
</Code> </Code>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment