Нужно ли вручную перечислять все подкаталоги в < resources > в Java POM

Чтобы заполнить ProgID, которые mt.exe не включает, вы можете вызвать ProgIDFromCLSID, чтобы просмотреть их из реестра. Это требует традиционной регистрации COM до завершения файла манифеста, но впоследствии файл манифеста будет самодостаточным.

Этот код C # добавляет ProgID ко всем классам COM в манифесте:

var manifest = XDocument.Load(fileName);
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("s", "urn:schemas-microsoft-com:asm.v1");
foreach (var classElement in manifest.XPathSelectElements("s:assembly/s:file/s:comClass", namespaceManager)) {
    var clsid = Guid.Parse(classElement.Attribute("clsid").Value);
    int result = ProgIDFromCLSID(ref clsid, out string progId); if (result != S_OK) throw new COMException($"ProgID lookup failed for {clsid}.", result);
    classElement.SetAttributeValue("progid", progId);
}
manifest.Save(fileName);

Код основан на этих определениях взаимодействия:

[DllImport("ole32.dll")] static extern int ProgIDFromCLSID([In] ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);
const int S_OK = 0;
0
задан Matt 7 March 2019 в 15:02
поделиться