Как проверить, зарегистрирован ли файл DLL?

Если вы используете Java 1.7, вы можете использовать java.nio.file.Files.walkFileTree(...) .

Например:

public class WalkFileTreeExample {

  public static void main(String[] args) {
    Path p = Paths.get("/usr");
    FileVisitor fv = new SimpleFileVisitor() {
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
          throws IOException {
        System.out.println(file);
        return FileVisitResult.CONTINUE;
      }
    };

    try {
      Files.walkFileTree(p, fv);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}

Если вы используете Java 8 , вы можете использовать интерфейс потока с помощью java.nio.file.Files.walk(...) :

public class WalkFileTreeExample {

  public static void main(String[] args) {
    try (Stream paths = Files.walk(Paths.get("/usr"))) {
      paths.forEach(System.out::println);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}

30
задан Peter Mortensen 25 July 2015 в 14:19
поделиться

4 ответа

Необходимо узнать GUID COM-объекта, определенного в DLL. Затем посмотрите на этот ключ реестра:

HKEY_CLASSES_ROOT\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32

Замените x's GUID.

Это должно иметь значение по умолчанию, которое содержит полный путь к DLL.

20
ответ дан Daniel Earwicker 28 November 2019 в 00:18
поделиться

Если Вы имеете в виду зарегистрированный в GAC, вот мое внимание: чтобы быть зарегистрированным в GAC, блок должен быть подписан со строгим именем (имейте маркер открытых ключей в, он - имя).

Таким образом, можно попробовать, загружают его использование Assembly.Load(string), если Вы добрались FileNotFoundException - блок не был зарегистрирован в GAC.

Если получено никакая ошибка, но результат Assembly.GetName().GetPublicKeyToken() является пустым или пустым - это означает нахождение блока в каталоге приложения, не в GAC.

5
ответ дан abatishchev 28 November 2019 в 00:18
поделиться
[DllImport("kernel32")]    
public extern static bool FreeLibrary(int hLibModule);

[DllImport("kernel32")]    
public extern static int LoadLibrary(string lpLibFileName);



public bool IsDllRegistered(string DllName)    
{

      int libId = LoadLibrary(DllName);    
      if (libId>0) FreeLibrary(libId);    
      return (libId>0);    
}
1
ответ дан BobbyShaftoe 28 November 2019 в 00:18
поделиться
  1. Объявите, что указатель Взаимодействует через интерфейс
  2. Назовите CoCreateInstance на CLSID и IID
  3. Если возвращаемое значение не является S_OK затем, класс не регистрируется
1
ответ дан Vinay 28 November 2019 в 00:18
поделиться