code: private static DependencyHintsInfo getPortableExecutableHints(String filename) {
          DependencyHintsInfo hints = null;
          try {
              // parse PE (Portable Executable) file
              PE pe = PEParser.parse(filename);
              ResourceDirectory rd = pe.getImageData().getResourceTable();
              ResourceEntry[] entries = ResourceHelper.findResources(rd, ResourceType.VERSION_INFO);
              byte[] data = entries[0].getData();
              VersionInfo version = ResourceParser.readVersionInfo(data);
              StringFileInfo stringFileInfo = version.getStringFileInfo();
              StringTable table = stringFileInfo.getTable(0);
  
              // collect general details
              hints = new DependencyHintsInfo();
              for (int i = 0; i < table.getCount(); i++) {
                  String value = table.getString(i).getValue();
                  if (StringUtils.isNotBlank(value) && !value.equals(MISSING_VALUE)) {
                      switch (table.getString(i).getKey()) {
                          case COMPANY_NAME:
                              hints.setCompanyName(value);
                              break;
                          case FILE_VERSION:
                              hints.setFileVersion(value);
                              break;
                          case COPYRIGHT:
                              hints.setCopyright(value);
                              break;
                          case ORIGINAL_FILE_NAME:
                              hints.setOriginalFilename(value);
                              break;
                          case PRODUCT_NAME:
                              hints.setProductName(value);
                              break;
                          case PRODUCT_VERSION:
                              hints.setProductVersion(value);
                              break;
                          default: break;
                      }
                  }
              }
  
              if (Platform.isWindows()) {
                  hints.setIssuerCommonName(executePowerShellCommand(MessageFormat.format(AUTH_CODE_SIGNATURE_ISSUER_PATTERN, filename)));
                  hints.setSubjectCommonName(executePowerShellCommand(MessageFormat.format(AUTH_CODE_SIGNATURE_SUBJECT_PATTERN, filename)));
              }
  
              // TODO handle msi
  
          } catch (Exception e) {
              // do nothing
          }
          return hints;
      }
docs: /* --- Private methods ---