TIA Openness Firewall
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.