Обнаружение открытия файла в процессе [дубликат]

Вы можете попробовать следующее:

$srcroot = "c:\temp\sourcedirectory"
$builroot= "c:\temp\targetdirectory"
gci -path $srcroot -filter $filepattern -recurse | 
  % { Copy-Item $_.FullName -destination ($_.FullName -replace [regex]::escape($srcroot),$builroot) }
39
задан Sam Saffron 23 August 2009 в 14:38
поделиться

6 ответов

  • 1
    Кто заботится о коде, эта вещь полезна! Даже лучше, чем Process Explorer, для чего он это делает. – Brian 23 October 2008 в 18:39
  • 2
    Нехорошее решение, использующее только управляемый код? – Kiquenet 11 August 2012 в 13:50
  • 3
    это не то, что легко в управляемом коде, я бы, вероятно, просто выложил в программу на C ++, если бы мне пришлось построить что-то вроде этого @Kiquenet – Sam Saffron 11 August 2012 в 13:53

Handle - отличная программа, и ссылка на codeproject хороша.

@Brian Причиной для кода является то, что handle.exe НЕ распространяется. Они также не выпускают свой источник.

Похоже, что .Net не будет легко делать это, так как кажется, что для доступа к информации требуется встроенный накопитель. Это невозможно сделать в .net без неиспользуемой DLL. Это относительный глубокий код ядра по сравнению с типичным кодированием .net. Я удивлен, что WMI не раскрывает этого.

2
ответ дан ElektroStudios 27 August 2018 в 22:59
поделиться

Возможно, используя инструмент командной строки:

OpenedFilesView v1.50 - просмотр открытых / заблокированных файлов в вашей системе (проблемы с нарушениями доступа)

http: // www. nirsoft.net/utils/opened_files_view.html

1
ответ дан Kiquenet 27 August 2018 в 22:59
поделиться

Посмотрите этот файл: http://vmccontroller.codeplex.com/SourceControl/changeset/view/47386#195318

И используйте:

DetectOpenFiles.GetOpenFilesEnumerator(processID);

Демо:

using System;
using System.Diagnostics;

namespace OpenFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var openFiles = VmcController.Services.DetectOpenFiles.GetOpenFilesEnumerator(Process.GetCurrentProcess().Id))
            {
                while (openFiles.MoveNext())
                {
                    Console.WriteLine(openFiles.Current);
                }
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

Он имеет зависимость от сборки System.EnterpriseServices

7
ответ дан manuc66 27 August 2018 в 22:59
поделиться
  • 1
    любой полный образец с исходным кодом? – Kiquenet 10 August 2012 в 12:56
  • 2
    Запустив его, как вы упомянули, GetOpenFilesEnumerator возвращает объект с двумя членами: & lt; br & gt; ERROR_ACCESS_DENIED и ERROR_INVALID_PARAMETERS – Lucian 11 September 2014 в 12:08
  • 3
    Просто протестирован, и этот код работает нормально. возможно, у вас фактически нет доступа. – Mehran 15 October 2015 в 08:56
  • 4
    Любая идея, какая сборка требуется для «EventTrackingEnabledAttribute», или "ОбслуживаемыйКомпонент"? – MacGyver 15 January 2016 в 22:15
  • 5
    @MacGyver System.EnterpriseServices – dwkd 18 March 2016 в 16:59

Вы можете P / INVOKE в функцию NtQuerySystemInformation запросить все дескрипторы, а затем перейти оттуда. Это обсуждение групп Google содержит сведения.

12
ответ дан Mark Cidade 27 August 2018 в 22:59
поделиться
  • 1
    Хорошая вещь. Я посмотрю, смогу ли я получить соединение – Sam Saffron 7 October 2008 в 07:07
  • 2
    любой пример кода для синтаксического анализа вывода в c #? – Kiquenet 29 December 2010 в 19:37
  • 3
    любой пример кода в c #? – Kiquenet 29 December 2010 в 19:38
  • 4
    Это ужасное решение. – bruce.banner 10 May 2011 в 17:30
  • 5
    Почему @bruce? любые причины, пожалуйста? – Kiquenet 11 August 2012 в 13:51
  • 6
    Единственная реальная проблема с использованием дескриптора - лицензия - вы не можете распространять дескриптор, даже в бесплатном. – penderi 24 April 2013 в 17:43
  • 7
    Вы можете его загрузить. – Mark Cidade 28 April 2013 в 15:16
Другие вопросы по тегам:

Похожие вопросы: