Ich darf mich gerade, für ein Kundenprojekt, mit der Siemens TIA Portal API beschäftigen. Ist schon einige Jahre her dass ich das gemacht habe.
Viel hat sich geändert, im API-Design, und es sind viele neue Funktionen dazu gekommen.

Wird eine Openness Applikation ausgeführt muss dies vom User bestätigt werden:

Dies muss jedesmal gemacht werden wenn sich der Hash des Programms oder das Datum (LastModified) geändert hat. Das ist natürlich beim Debuggen schlimm, wenn jedes mal der Dialog kommt.

Ich hab mal die Methode hier gebastelt welchen den Whitelist-Eintrag (Bestätigung durch User) selbst macht:

public static void SetTiaPortalFirewall()
{
  // Check if admin
  WindowsIdentity identity = WindowsIdentity.GetCurrent();
  WindowsPrincipal principal = new WindowsPrincipal(identity);
  bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
  if (!isAdmin)
  {
    return;
  }

  Assembly assembly = Assembly.GetExecutingAssembly();
  string exePath = assembly.Location;

  // Get hash
  HashAlgorithm hashAlgorithm = SHA256.Create();
  FileStream stream = File.OpenRead(exePath);
  byte[] hash = hashAlgorithm.ComputeHash(stream);
  string convertedHash = Convert.ToBase64String(hash);

  // Get date
  FileInfo fileInfo = new FileInfo(exePath);
  DateTime lastWriteTimeUtc = fileInfo.LastWriteTimeUtc;
  string lastWriteTimeUtcFormatted = lastWriteTimeUtc.ToString("yyyy'/'MM'/'dd HH:mm:ss.fff");

  // Get execution version
  AssemblyName siemensAssembly = Assembly.GetExecutingAssembly().GetReferencedAssemblies().First(obj => obj.Name.Equals("Siemens.Engineering"));
  string version = siemensAssembly.Version.ToString(2);

  // Set key and values
  string keyFullName = $@"SOFTWARE\Siemens\Automation\Openness\{version}\Whitelist\{fileInfo.Name}\Entry";
  RegistryKey key = Registry.LocalMachine.CreateSubKey(keyFullName);
  if (key == null)
  {
    throw new Exception("Key note found: " + keyFullName);
  }
  key.SetValue("Path", exePath);
  key.SetValue("DateModified", lastWriteTimeUtcFormatted);
  key.SetValue("FileHash", convertedHash);
}

Adminrechte müssen da sein. Somit muss man Visual Studio als Administrator starten.