Если вы используете 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();
}
}
}
Необходимо узнать GUID COM-объекта, определенного в DLL. Затем посмотрите на этот ключ реестра:
HKEY_CLASSES_ROOT\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32
Замените x's GUID.
Это должно иметь значение по умолчанию, которое содержит полный путь к DLL.
Если Вы имеете в виду зарегистрированный в GAC, вот мое внимание: чтобы быть зарегистрированным в GAC, блок должен быть подписан со строгим именем (имейте маркер открытых ключей в, он - имя).
Таким образом, можно попробовать, загружают его использование Assembly.Load(string)
, если Вы добрались FileNotFoundException
- блок не был зарегистрирован в GAC.
Если получено никакая ошибка, но результат Assembly.GetName().GetPublicKeyToken()
является пустым или пустым - это означает нахождение блока в каталоге приложения, не в GAC.
[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);
}