/// <summary>
        /// Imports a list of servers from a file.
        /// </summary>
        public static void Import(string filepath, bool register)
        {
            Export.ListOfRegisteredServers list = new Opc.ConfigTool.Export.ListOfRegisteredServers();

            // read from file.
            XmlTextReader reader     = new XmlTextReader(filepath);
            XmlSerializer serializer = new XmlSerializer(typeof(Export.ListOfRegisteredServers), ConfigUtils.ConfigToolSchemaUri);

            Export.ListOfRegisteredServers servers = (Export.ListOfRegisteredServers)serializer.Deserialize(reader);
            reader.Close();

            if (ConfigUtils.IsEmpty(servers.Server))
            {
                return;
            }

            // registers the servers.
            for (int ii = 0; ii < servers.Server.Length; ii++)
            {
                RegisteredDotNetOpcServer server = Import(servers.Server[ii]);

                if (register)
                {
                    server.Register();
                }
                else
                {
                    server.Unregister();
                }
            }
        }
        /// <summary>
        /// Exports a server to a export file.
        /// </summary>
        private static Export.RegisteredServer Export(RegisteredDotNetOpcServer server)
        {
            Export.RegisteredServer serverToExport = new Export.RegisteredServer();

            serverToExport.Clsid  = server.Clsid.ToString();
            serverToExport.ProgId = server.ProgId;

            if (server.Description != server.ProgId)
            {
                serverToExport.Description = server.Description;
            }

            serverToExport.WrapperClsid = ConfigUtils.ProgIDFromCLSID(server.WrapperClsid);
            serverToExport.ServerClsid  = ConfigUtils.ProgIDFromCLSID(server.ServerClsid);

            // export parameters.
            serverToExport.Parameter = new Export.Parameter[server.Parameters.Count];

            int index = 0;

            foreach (KeyValuePair <string, string> entry in server.Parameters)
            {
                Export.Parameter parameter = new Export.Parameter();

                parameter.Name  = entry.Key;
                parameter.Value = entry.Value;

                serverToExport.Parameter[index++] = parameter;
            }

            // return exported server.
            return(serverToExport);
        }
Пример #3
0
        /// <summary>
        /// Displays the parameters in the control.
        /// </summary>
        public void Initialize(RegisteredDotNetOpcServer server)
        {
            Clear();

            if (server != null)
            {
                foreach (KeyValuePair <string, string> entry in server.Parameters)
                {
                    AddItem(entry);
                }
            }

            AdjustColumns();
        }
Пример #4
0
        /// <summary>
        /// Displays the parameters in the control.
        /// </summary>
        public void Initialize(RegisteredDotNetOpcServer server)
        {
            Clear();

            if (server != null)
            {
                foreach (KeyValuePair<string,string> entry in server.Parameters)
                {
                    AddItem(entry);
                }
            }

            AdjustColumns();
        }
Пример #5
0
        private void ExportMI_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                // select file.
                OpenFileDialog dialog = new OpenFileDialog();

                dialog.CheckFileExists  = false;
                dialog.CheckPathExists  = true;
                dialog.DefaultExt       = ".xml";
                dialog.Filter           = "Registration Files (*.xml)|*.xml|All Files (*.*)|*.*";
                dialog.ValidateNames    = true;
                dialog.Title            = "Export Registered Servers";
                dialog.RestoreDirectory = true;
                dialog.AddExtension     = true;
                dialog.FileName         = "";
                dialog.InitialDirectory = m_currentDirectory;

                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                RegisteredDotNetOpcServer.Export(dialog.FileName);

                m_currentDirectory = new FileInfo(dialog.FileName).DirectoryName;
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        /// <summary>
        /// Imports a server from a export file.
        /// </summary>
        private static RegisteredDotNetOpcServer Import(Export.RegisteredServer serverToImport)
        {
            RegisteredDotNetOpcServer server = new RegisteredDotNetOpcServer();

            // assign clsid if none specified.
            if (String.IsNullOrEmpty(serverToImport.Clsid))
            {
                server.Clsid = ConfigUtils.CLSIDFromProgID(serverToImport.ProgId);

                if (server.Clsid == Guid.Empty)
                {
                    server.Clsid = Guid.NewGuid();
                }
            }
            else
            {
                server.Clsid = new Guid(serverToImport.Clsid);
            }

            // get prog id and description.
            server.ProgId      = serverToImport.ProgId;
            server.Description = serverToImport.Description;

            // parse wrapper clsid/prog id.
            try
            {
                server.WrapperClsid = new Guid(serverToImport.WrapperClsid);
            }
            catch
            {
                server.WrapperClsid = ConfigUtils.CLSIDFromProgID(serverToImport.WrapperClsid);
            }

            // parse wrapped server clsid/prog id.
            try
            {
                server.ServerClsid = new Guid(serverToImport.ServerClsid);
            }
            catch
            {
                server.ServerClsid = ConfigUtils.CLSIDFromProgID(serverToImport.ServerClsid);
            }

            // read parameters.
            server.Parameters.Clear();

            if (!ConfigUtils.IsEmpty(serverToImport.Parameter))
            {
                for (int ii = 0; ii < serverToImport.Parameter.Length; ii++)
                {
                    Export.Parameter parameter = serverToImport.Parameter[ii];

                    if (parameter != null && !String.IsNullOrEmpty(parameter.Name))
                    {
                        server.Parameters.Add(parameter.Name, parameter.Value);
                    }
                }
            }

            // return new server.
            return(server);
        }
Пример #7
0
        /// <summary>
        /// Initializes and displays a modal dialog.
        /// </summary>
        public RegisteredDotNetOpcServer ShowDialog(RegisteredDotNetOpcServer registeredServer)
        {
            Initialize();

            m_registeredServer = registeredServer;

            if (registeredServer != null)
            {
                // select the .NET server.
                bool found = false;

                for (int ii = 0; ii < DotNetServerCB.Items.Count; ii++)
                {
                    DotNetOpcServer server = DotNetServerCB.Items[ii] as DotNetOpcServer;

                    if (server.Clsid == registeredServer.ServerClsid)
                    {
                        DotNetServerCB.SelectedIndex = ii;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    DotNetServerCB.SelectedIndex = DotNetServerCB.Items.Add(new DotNetOpcServer(registeredServer.ServerClsid));
                }

                // select the wrapper process.
                found = false;

                for (int ii = 0; ii < WrapperCB.Items.Count; ii++)
                {
                    DotNetOpcServerWrapper wrapper = WrapperCB.Items[ii] as DotNetOpcServerWrapper;

                    if (wrapper.Clsid == registeredServer.WrapperClsid)
                    {
                        WrapperCB.SelectedIndex = ii;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    WrapperCB.SelectedIndex = WrapperCB.Items.Add(new DotNetOpcServerWrapper(registeredServer.WrapperClsid));
                }

                // set the remaining parameters.
                ClsidTB.Text       = registeredServer.Clsid.ToString();
                ProgIdTB.Text      = registeredServer.ProgId;
                DescriptionTB.Text = registeredServer.Description;

                ParametersCTRL.Initialize(registeredServer);
            }

            if (DotNetServerCB.SelectedIndex == -1 && DotNetServerCB.Items.Count > 0)
            {
                DotNetServerCB.SelectedIndex = 0;
            }

            if (WrapperCB.SelectedIndex == -1 && WrapperCB.Items.Count > 0)
            {
                WrapperCB.SelectedIndex = 0;
            }

            ShowDialog();

            if (DialogResult != DialogResult.OK)
            {
                return(null);
            }

            return(m_registeredServer);
        }
Пример #8
0
        private void OkBTN_Click(object sender, EventArgs e)
        {
            try
            {
                RegisteredDotNetOpcServer server = new RegisteredDotNetOpcServer();

                // set the .NET server.
                if (DotNetServerCB.SelectedIndex == -1)
                {
                    throw new ApplicationException("No .NET OPC server selected.");
                }

                server.ServerClsid = ((DotNetOpcServer)DotNetServerCB.SelectedItem).Clsid;

                // set the wrapper.
                if (WrapperCB.SelectedIndex == -1)
                {
                    throw new ApplicationException("No wrapper process selected.");
                }

                server.WrapperClsid = ((DotNetOpcServerWrapper)WrapperCB.SelectedItem).Clsid;

                // set the clsid.
                if (String.IsNullOrEmpty(ClsidTB.Text))
                {
                    server.Clsid = Guid.NewGuid();
                }
                else
                {
                    server.Clsid = new Guid(ClsidTB.Text);
                }

                // set the prog id.
                if (String.IsNullOrEmpty(ProgIdTB.Text))
                {
                    server.ProgId = ((DotNetOpcServer)DotNetServerCB.SelectedItem).ProgId + ".Wrapped";
                }
                else
                {
                    server.ProgId = ProgIdTB.Text;
                }

                // save the decription.
                server.Description = DescriptionTB.Text;

                // save the parameters.
                Dictionary <string, string> parameters = ParametersCTRL.GetParameters();

                if (parameters != null)
                {
                    foreach (KeyValuePair <string, string> entry in parameters)
                    {
                        server.Parameters[entry.Key] = entry.Value;
                    }
                }

                // remove existing registration.
                if (m_registeredServer != null)
                {
                    m_registeredServer.Unregister();
                }

                // update registry.
                server.Register();

                m_registeredServer = server;

                // close dialog.
                DialogResult = DialogResult.OK;
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
        }
Пример #9
0
        /// <summary>
        /// Initializes and displays a modal dialog.
        /// </summary>
        public RegisteredDotNetOpcServer ShowDialog(RegisteredDotNetOpcServer registeredServer)
        {
            Initialize();

            m_registeredServer = registeredServer;

            if (registeredServer != null)
            {
                // select the .NET server.
                bool found = false;

                for (int ii = 0; ii < DotNetServerCB.Items.Count; ii++)
                {
                    DotNetOpcServer server = DotNetServerCB.Items[ii] as DotNetOpcServer;

                    if (server.Clsid == registeredServer.ServerClsid)
                    {
                        DotNetServerCB.SelectedIndex = ii;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    DotNetServerCB.SelectedIndex = DotNetServerCB.Items.Add(new DotNetOpcServer(registeredServer.ServerClsid));
                }

                // select the wrapper process.
                found = false;

                for (int ii = 0; ii < WrapperCB.Items.Count; ii++)
                {
                    DotNetOpcServerWrapper wrapper = WrapperCB.Items[ii] as DotNetOpcServerWrapper;

                    if (wrapper.Clsid == registeredServer.WrapperClsid)
                    {
                        WrapperCB.SelectedIndex = ii;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    WrapperCB.SelectedIndex = WrapperCB.Items.Add(new DotNetOpcServerWrapper(registeredServer.WrapperClsid));
                }

                // set the remaining parameters.
                ClsidTB.Text       = registeredServer.Clsid.ToString();
                ProgIdTB.Text      = registeredServer.ProgId;
                DescriptionTB.Text = registeredServer.Description;

                ParametersCTRL.Initialize(registeredServer);
            }

            if (DotNetServerCB.SelectedIndex == -1 && DotNetServerCB.Items.Count > 0)
            {
                DotNetServerCB.SelectedIndex = 0;
            }

            if (WrapperCB.SelectedIndex == -1 && WrapperCB.Items.Count > 0)
            {
                WrapperCB.SelectedIndex = 0;
            }

            ShowDialog();

            if (DialogResult != DialogResult.OK)
            {
                return null;
            }

            return m_registeredServer;
        }
Пример #10
0
        private void OkBTN_Click(object sender, EventArgs e)
        {
            try
            {
                RegisteredDotNetOpcServer server = new RegisteredDotNetOpcServer();

                // set the .NET server.
                if (DotNetServerCB.SelectedIndex == -1)
                {
                    throw new ApplicationException("No .NET OPC server selected.");
                }

                server.ServerClsid = ((DotNetOpcServer)DotNetServerCB.SelectedItem).Clsid;

                // set the wrapper.
                if (WrapperCB.SelectedIndex == -1)
                {
                    throw new ApplicationException("No wrapper process selected.");
                }

                server.WrapperClsid = ((DotNetOpcServerWrapper)WrapperCB.SelectedItem).Clsid;

                // set the clsid.
                if (String.IsNullOrEmpty(ClsidTB.Text))
                {
                    server.Clsid = Guid.NewGuid();
                }
                else
                {
                    server.Clsid = new Guid(ClsidTB.Text);
                }

                // set the prog id.
                if (String.IsNullOrEmpty(ProgIdTB.Text))
                {
                    server.ProgId = ((DotNetOpcServer)DotNetServerCB.SelectedItem).ProgId + ".Wrapped";
                }
                else
                {
                    server.ProgId = ProgIdTB.Text;
                }

                // save the decription.
                server.Description = DescriptionTB.Text;

                // save the parameters.
                Dictionary<string,string> parameters = ParametersCTRL.GetParameters();

                if (parameters != null)
                {
                    foreach (KeyValuePair<string,string> entry in parameters)
                    {
                        server.Parameters[entry.Key] = entry.Value;
                    }
                }

                // remove existing registration.
                if (m_registeredServer != null)
                {
                    m_registeredServer.Unregister();
                }

                // update registry.
                server.Register();

                m_registeredServer = server;

                // close dialog.
                DialogResult = DialogResult.OK;
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
        }
        /// <summary>
        /// Imports a server from a export file.
        /// </summary>
        private static RegisteredDotNetOpcServer Import(Export.RegisteredServer serverToImport)
        {
            RegisteredDotNetOpcServer server = new RegisteredDotNetOpcServer();

            // assign clsid if none specified.
            if (String.IsNullOrEmpty(serverToImport.Clsid))
            {
                server.Clsid = ConfigUtils.CLSIDFromProgID(serverToImport.ProgId);

                if (server.Clsid == Guid.Empty)
                {
                    server.Clsid = Guid.NewGuid();
                }
            }
            else
            {
                server.Clsid = new Guid(serverToImport.Clsid);
            }

            // get prog id and description.
            server.ProgId      = serverToImport.ProgId;
            server.Description = serverToImport.Description;

            // parse wrapper clsid/prog id.
            try
            {
                server.WrapperClsid = new Guid(serverToImport.WrapperClsid);
            }
            catch
            {
                server.WrapperClsid = ConfigUtils.CLSIDFromProgID(serverToImport.WrapperClsid);
            }

            // parse wrapped server clsid/prog id.
            try
            {
                server.ServerClsid = new Guid(serverToImport.ServerClsid);
            }
            catch
            {
                server.ServerClsid = ConfigUtils.CLSIDFromProgID(serverToImport.ServerClsid);
            }

            // read parameters.
            server.Parameters.Clear();

            if (!ConfigUtils.IsEmpty(serverToImport.Parameter))
            {
                for (int ii = 0; ii < serverToImport.Parameter.Length; ii++)
                {
                    Export.Parameter parameter = serverToImport.Parameter[ii];

                    if (parameter != null && !String.IsNullOrEmpty(parameter.Name))
                    {
                        server.Parameters.Add(parameter.Name, parameter.Value);
                    }
                }
            }

            // return new server.
            return server;
        }
        /// <summary>
        /// Exports a server to a export file.
        /// </summary>
        private static Export.RegisteredServer Export(RegisteredDotNetOpcServer server)
        {
            Export.RegisteredServer serverToExport = new Export.RegisteredServer();

            serverToExport.Clsid  = server.Clsid.ToString();
            serverToExport.ProgId = server.ProgId;

            if (server.Description != server.ProgId)
            {
                serverToExport.Description = server.Description;
            }

            serverToExport.WrapperClsid = ConfigUtils.ProgIDFromCLSID(server.WrapperClsid);
            serverToExport.ServerClsid  = ConfigUtils.ProgIDFromCLSID(server.ServerClsid);

            // export parameters.
            serverToExport.Parameter = new Export.Parameter[server.Parameters.Count];

            int index = 0;

            foreach (KeyValuePair<string,string> entry in server.Parameters)
            {
                Export.Parameter parameter = new Export.Parameter();

                parameter.Name  = entry.Key;
                parameter.Value = entry.Value;

                serverToExport.Parameter[index++] = parameter;
            }

            // return exported server.
            return serverToExport;
        }
Пример #13
0
        /// <summary>
        /// Processes the command line arguments.
        /// </summary>
        private static bool ProcessCommandLine()
        {
            string commandLine = Environment.CommandLine;

            List <string> tokens = new List <string>();

            bool          quotedToken = false;
            StringBuilder token       = new StringBuilder();

            for (int ii = 0; ii < commandLine.Length; ii++)
            {
                char ch = commandLine[ii];

                if (quotedToken)
                {
                    if (ch == '"')
                    {
                        if (token.Length > 0)
                        {
                            tokens.Add(token.ToString());
                            token = new StringBuilder();
                        }

                        quotedToken = false;
                        continue;
                    }

                    token.Append(ch);
                }
                else
                {
                    if (token.Length == 0)
                    {
                        if (ch == '"')
                        {
                            quotedToken = true;
                            continue;
                        }
                    }

                    if (Char.IsWhiteSpace(ch))
                    {
                        if (token.Length > 0)
                        {
                            tokens.Add(token.ToString());
                            token = new StringBuilder();
                        }

                        continue;
                    }

                    token.Append(ch);
                }
            }

            if (token.Length > 0)
            {
                tokens.Add(token.ToString());
            }

            // launch gui if no arguments provided.
            if (tokens.Count == 1)
            {
                return(false);
            }

            bool silent = false;

            for (int ii = 1; ii < tokens.Count; ii++)
            {
                if (tokens[ii] == "-?")
                {
                    StreamReader reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("Opc.ConfigTool.HelpText.txt"));
                    MessageBox.Show(reader.ReadToEnd(), "Opc.ConfigTool");
                    reader.Close();
                    return(true);
                }

                if (tokens[ii] == "-s")
                {
                    silent = true;
                    continue;
                }

                try
                {
                    if (tokens[ii] == "-ra")
                    {
                        if (tokens.Count - ii != 2)
                        {
                            throw new ArgumentException("Incorrect number of parameters specified with the -ra option.");
                        }

                        DotNetOpcServer.RegisterAssembly(tokens[ii + 1]);
                        return(true);
                    }

                    if (tokens[ii] == "-ua")
                    {
                        if (tokens.Count - ii != 2)
                        {
                            throw new ArgumentException("Incorrect number of parameters specified with the -ua option.");
                        }

                        DotNetOpcServer.UnregisterAssembly(tokens[ii + 1]);
                        return(true);
                    }

                    if (tokens[ii] == "-rx")
                    {
                        if (tokens.Count - ii != 2)
                        {
                            throw new ArgumentException("Incorrect number of parameters specified with the -rx option.");
                        }

                        RegisteredDotNetOpcServer.Import(tokens[ii + 1], true);
                        return(true);
                    }

                    if (tokens[ii] == "-ux")
                    {
                        if (tokens.Count - ii != 2)
                        {
                            throw new ArgumentException("Incorrect number of parameters specified with the -ux option.");
                        }

                        RegisteredDotNetOpcServer.Import(tokens[ii + 1], false);
                        return(true);
                    }
                }
                catch (Exception e)
                {
                    if (!silent)
                    {
                        new ExceptionDlg().ShowDialog("Opc.ConfigTool", e);
                        return(true);
                    }
                }
            }

            return(true);
        }