예제 #1
0
        public void BatchRunnerOptionsTest()
        {
            var opts = WithDocumentMock(
                d =>
            {
                d.Input.Add("D:\\folder1");
                d.Input.Add("D:\\folder2");
                d.Filters.Clear();
                d.Filters.Add(new FilterVM("*.sld*"));
                d.Macros.Add(new MacroDataVM(new MacroData()
                {
                    FilePath = "C:\\macro1.swp"
                }));
                d.Macros.Add(new MacroDataVM(new MacroData()
                {
                    FilePath = "C:\\macro2.swp"
                }));
                d.Settings.IsTimeoutEnabled        = true;
                d.Settings.Timeout                 = 30;
                d.Settings.OpenFileOptionSilent    = true;
                d.Settings.OpenFileOptionReadOnly  = true;
                d.Settings.StartupOptionBackground = true;
                d.Settings.StartupOptionSilent     = false;
                d.Settings.StartupOptionSafe       = false;
                d.Settings.Version                 = SwApplicationFactory.CreateVersion(SwVersion_e.Sw2020);
            });

            Assert.IsTrue(new string[] { "*.sld*" }.SequenceEqual(opts.Filters));
            Assert.IsTrue(new string[] { "C:\\macro1.swp", "C:\\macro2.swp" }.SequenceEqual(opts.Macros.Select(m => m.FilePath)));
            Assert.IsTrue(new string[] { "D:\\folder1", "D:\\folder2" }.SequenceEqual(opts.Input));
            Assert.AreEqual(30, opts.Timeout);
            Assert.AreEqual(OpenFileOptions_e.Silent | OpenFileOptions_e.ReadOnly | OpenFileOptions_e.ForbidUpgrade, opts.OpenFileOptions);
            Assert.AreEqual(StartupOptions_e.Background, opts.StartupOptions);
            Assert.AreEqual("Sw2020", opts.VersionId);
        }
예제 #2
0
 public IXVersion ParseVersion(string version)
 {
     if (string.IsNullOrEmpty(version))
     {
         var installedVers = SwApplicationFactory.GetInstalledVersions();
         if (installedVers.Any())
         {
             return(installedVers.OrderBy(v => (int)v.Major).First());
         }
         else
         {
             throw new Exception("Failed to find installed version of the host application");
         }
     }
     else if (int.TryParse(version, out int rev))
     {
         var swVers = (SwVersion_e)Enum.Parse(typeof(SwVersion_e), $"Sw{rev}");
         return(SwApplicationFactory.CreateVersion(swVers));
     }
     else if (version.StartsWith("solidworks", StringComparison.CurrentCultureIgnoreCase))
     {
         var swVers = (SwVersion_e)Enum.Parse(typeof(SwVersion_e), $"Sw{version.Substring("solidworks".Length).Trim()}");
         return(SwApplicationFactory.CreateVersion(swVers));
     }
     else
     {
         var swVers = (SwVersion_e)Enum.Parse(typeof(SwVersion_e), version);
         return(SwApplicationFactory.CreateVersion(swVers));
     }
 }
예제 #3
0
        protected void UpdateSwReferences(string destPath, params string[] assmRelPaths)
        {
            Process prc;

            using (var app = SwApplicationFactory.Create(SW_VERSION,
                                                         Xarial.XCad.Enums.ApplicationState_e.Background
                                                         | Xarial.XCad.Enums.ApplicationState_e.Silent
                                                         | Xarial.XCad.Enums.ApplicationState_e.Safe))
            {
                prc = app.Process;

                foreach (var assmPath in assmRelPaths)
                {
                    using (var doc = (ISwDocument)app.Documents.Open(Path.Combine(destPath, assmPath)))
                    {
                        doc.Model.ForceRebuild3(false);
                        doc.Save();
                        var deps = (doc.Model.Extension.GetDependencies(false, false, false, false, false) as string[]).Where((item, index) => index % 2 != 0).ToArray();

                        if (!deps.All(d => d.Contains("^") || d.StartsWith(destPath, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            throw new Exception("Failed to setup source assemblies");
                        }
                    }
                }

                app.Close();
            }

            prc.Kill();
        }
예제 #4
0
        private string FindSwAppPath(SwVersion_e?vers)
        {
            RegistryKey swAppRegKey = null;

            if (vers.HasValue)
            {
                var progId = string.Format(SwApplicationFactory.PROG_ID_TEMPLATE, (int)vers);
                swAppRegKey = Registry.ClassesRoot.OpenSubKey(progId);
            }
            else
            {
                foreach (var versCand in Enum.GetValues(typeof(SwVersion_e)).Cast <int>().OrderByDescending(x => x))
                {
                    var progId = string.Format(SwApplicationFactory.PROG_ID_TEMPLATE, versCand);
                    swAppRegKey = Registry.ClassesRoot.OpenSubKey(progId);

                    if (swAppRegKey != null)
                    {
                        break;
                    }
                }
            }

            if (swAppRegKey != null)
            {
                return(SwApplicationFactory.FindSwPathFromRegKey(swAppRegKey));
            }
            else
            {
                throw new NullReferenceException("Failed to find the information about the installed SOLIDWORKS applications in the registry");
            }
        }
예제 #5
0
        public void BatchRunnerOptionsTimeoutTest()
        {
            var      mock = new Mock <IBatchRunnerModel>();
            BatchJob opts = null;

            mock.Setup(m => m.CreateExecutor(It.IsAny <BatchJob>())).Callback <BatchJob>(e => opts = e).Returns(new Mock <IBatchRunJobExecutor>().Object);
            mock.Setup(m => m.InstalledVersions).Returns(new ISwVersion[] { SwApplicationFactory.CreateVersion(SwVersion_e.Sw2019), SwApplicationFactory.CreateVersion(SwVersion_e.Sw2020) });
            mock.Setup(m => m.GetVersionId(It.IsAny <IXVersion>())).Returns("Sw2020");
            mock.Setup(m => m.ParseVersion(It.IsAny <string>())).Returns(new Mock <IXVersion>().Object);

            var modelMock  = mock.Object;
            var msgSvcMock = new Mock <IMessageService>().Object;
            var vm         = new BatchManagerVM(modelMock, msgSvcMock);

            vm.Document = new BatchDocumentVM("", new BatchJob(), modelMock, msgSvcMock);

            vm.Document.Input.Add("abc");
            vm.Document.Macros.Add(new MacroData()
            {
                FilePath = "xyz"
            });
            vm.Document.Settings.Version = SwApplicationFactory.CreateVersion(SwVersion_e.Sw2019);

            vm.Document.Settings.Timeout          = 300;
            vm.Document.Settings.IsTimeoutEnabled = false;
            vm.Document.Settings.IsTimeoutEnabled = true;

            vm.Document.RunJobCommand.Execute(null);

            Assert.AreEqual(300, opts.Timeout);
        }
        public void Setup()
        {
            if (SW_PRC_ID < 0)
            {
                List <string> m_DisabledStartupAddIns;

                SwApplicationFactory.DisableAllAddInsStartup(out m_DisabledStartupAddIns);

                m_App = SwApplicationFactory.Create(null,
                                                    ApplicationState_e.Background
                                                    | ApplicationState_e.Safe
                                                    | ApplicationState_e.Silent);

                if (m_DisabledStartupAddIns?.Any() == true)
                {
                    SwApplicationFactory.EnableAddInsStartup(m_DisabledStartupAddIns);
                }

                m_CloseSw = true;
            }
            else if (SW_PRC_ID == 0)
            {
                var prc = Process.GetProcessesByName("SLDWORKS").First();
                m_App = SwApplicationFactory.FromProcess(prc);
            }
            else
            {
                var prc = Process.GetProcessById(SW_PRC_ID);
                m_App = SwApplicationFactory.FromProcess(prc);
            }

            m_SwApp       = m_App.Sw;
            m_Disposables = new List <IDisposable>();
        }
        public void ConfigureTest()
        {
            var app = SwApplicationFactory.FromProcess(Process.GetProcessesByName("SLDWORKS").First());

            var svc = new CabinetConfiguratorService();

            svc.Configure((IXAssembly)app.Documents.Active, 2.0, 1.0, 0.6, 4, 0.6, HandleType_e.C);
        }
예제 #8
0
파일: Program.cs 프로젝트: EddyAlleman/xcad
        private static void CustomServices()
        {
            var app     = SwApplicationFactory.PreCreate();
            var svcColl = new ServiceCollection();

            svcColl.AddOrReplace <IXLogger, MyLogger>();
            app.CustomServices = svcColl;
            app.Commit();
        }
예제 #9
0
        public void EqualityTest()
        {
            var v1 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v2 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v3 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2019);

            Assert.That(v1.Equals(v2));
            Assert.That(!v1.Equals(v3));
        }
예제 #10
0
        public IXApplication StartApplication(IXVersion vers, StartupOptions_e opts,
                                              CancellationToken cancellationToken)
        {
            var app = SwApplicationFactory.PreCreate();

            app.State   = ApplicationState_e.Default;
            app.Version = (ISwVersion)vers;

            app.CustomServices = m_CustomServices;

            List <string> forceDisabledAddIns = null;

            if (opts.HasFlag(StartupOptions_e.Safe))
            {
                app.State |= ApplicationState_e.Safe;
                TryDisableAddIns(out forceDisabledAddIns);
            }

            if (opts.HasFlag(StartupOptions_e.Background))
            {
                app.State |= ApplicationState_e.Background;
            }

            if (opts.HasFlag(StartupOptions_e.Silent))
            {
                app.State |= ApplicationState_e.Silent;
            }

            if (opts.HasFlag(StartupOptions_e.Hidden))
            {
                app.State |= ApplicationState_e.Hidden;
            }

            try
            {
                app.Commit(cancellationToken);
            }
            finally
            {
                if (forceDisabledAddIns != null)
                {
                    TryEnableAddIns(forceDisabledAddIns);
                }
            }

            app.Sw.UserControlBackground = true;
            app.Sw.CommandInProgress     = true;

            //Note. By some reasons the process from IXApplication::Process does not fire exited event
            var prc = Process.GetProcessById(app.Process.Id);

            prc.EnableRaisingEvents = true;
            prc.Exited += OnProcessExited;
            m_ForceDisabledAddIns.Add(prc, forceDisabledAddIns);

            return(app);
        }
예제 #11
0
        public void CompareExtensionTest()
        {
            var v1 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v2 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v3 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2019);

            Assert.AreEqual(VersionEquality_e.Same, v1.Compare(v2));
            Assert.AreEqual(VersionEquality_e.Newer, v1.Compare(v3));
            Assert.AreEqual(VersionEquality_e.Older, v3.Compare(v2));
        }
예제 #12
0
        public void CompareTest()
        {
            var v1 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v2 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
            var v3 = SwApplicationFactory.CreateVersion(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2019);

            Assert.AreEqual(0, v1.CompareTo(v2));
            Assert.AreEqual(1, v1.CompareTo(v3));
            Assert.AreEqual(-1, v3.CompareTo(v2));
        }
예제 #13
0
        public MainWindow()
        {
            InitializeComponent();

            var app = SwApplicationFactory.Create();

            m_PrpsReader = new PropertiesReaderService(app);
            var vm = new PropertiesTableVM(m_PrpsReader);

            this.DataContext = vm;
        }
예제 #14
0
 protected override IXApplication CastApplication(object app)
 {
     if (app is ISldWorks)
     {
         return(SwApplicationFactory.FromPointer((ISldWorks)app));
     }
     else
     {
         throw new InvalidCastException("Pointer to dispatch is not ISldWorks");
     }
 }
예제 #15
0
 private void TryDisableAddIns(out List <string> guids)
 {
     try
     {
         SwApplicationFactory.DisableAllAddInsStartup(out guids);
     }
     catch (Exception ex)
     {
         m_Logger.Log(ex);
         guids = null;
     }
 }
예제 #16
0
 private void TryEnableAddIns(List <string> guids)
 {
     try
     {
         if (guids?.Any() == true)
         {
             SwApplicationFactory.EnableAddInsStartup(guids);
         }
     }
     catch (Exception ex)
     {
         m_Logger.Log(ex);
     }
 }
예제 #17
0
        public void BatchRunnerOptionsTimeoutDisableTest()
        {
            var opts = WithDocumentMock(d =>
            {
                d.Input.Add("abc");
                d.Macros.Add(new MacroDataVM(new MacroData()
                {
                    FilePath = "xyz"
                }));
                d.Settings.Version          = SwApplicationFactory.CreateVersion(SwVersion_e.Sw2019);
                d.Settings.IsTimeoutEnabled = false;
            });

            Assert.AreEqual(-1, opts.Timeout);
        }
예제 #18
0
        static void Main(string[] args)
        {
            using (var app = SwApplicationFactory.Create(SwVersion_e.Sw2020, ApplicationState_e.Background))
            {
                var doc = (ISwDocument)app.Documents.Open(
                    Path.Combine(Path.GetDirectoryName(typeof(Program).Assembly.Location), @"template\model1.SLDPRT"),
                    readOnly: true);

                Console.WriteLine("Enter width in meters");
                var widthStr = Console.ReadLine();

                if (!string.IsNullOrEmpty(widthStr))
                {
                    doc.Dimensions["Width@Base"].SetValue(double.Parse(widthStr));
                }

                Console.WriteLine("Enter height in meters");
                var heightStr = Console.ReadLine();

                if (!string.IsNullOrEmpty(heightStr))
                {
                    doc.Dimensions["Height@Boss"].SetValue(double.Parse(heightStr));
                }

                Console.WriteLine("Enter length in meters");
                var lengthStr = Console.ReadLine();

                if (!string.IsNullOrEmpty(lengthStr))
                {
                    doc.Dimensions["Length@Base"].SetValue(double.Parse(lengthStr));
                }

                Console.WriteLine("Enter output file path");
                var outFilePath = Console.ReadLine();

                int errs  = -1;
                int warns = -1;

                if (!doc.Model.Extension.SaveAs(outFilePath,
                                                (int)SolidWorks.Interop.swconst.swSaveAsVersion_e.swSaveAsCurrentVersion,
                                                (int)SolidWorks.Interop.swconst.swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref errs, ref warns))
                {
                    throw new Exception("Failed to save document");
                }

                app.Close();
            }
        }
예제 #19
0
        static void Main(string[] args)
        {
            using (var app = SwApplicationFactory.Create(SwVersion_e.Sw2020, ApplicationState_e.Background))
            {
                ISldWorks swApp = app.Sw;
                Console.WriteLine(swApp.RevisionNumber());

                var doc = app.Documents.Open(@"D:\model1.SLDPRT", Documents.Enums.DocumentState_e.ReadOnly);

                var swModel = (doc as ISwDocument).Model;

                Console.WriteLine(swModel.GetTitle());

                app.Close();
            }
        }
예제 #20
0
        public void BatchRunnerOptionsTest()
        {
            var      mock = new Mock <IBatchRunnerModel>();
            BatchJob opts = null;

            mock.Setup(m => m.CreateExecutor(It.IsAny <BatchJob>())).Callback <BatchJob>(e => opts = e).Returns(new Mock <IBatchRunJobExecutor>().Object);
            mock.Setup(m => m.InstalledVersions).Returns(new ISwVersion[] { SwApplicationFactory.CreateVersion(SwVersion_e.Sw2019), SwApplicationFactory.CreateVersion(SwVersion_e.Sw2020) });
            mock.Setup(m => m.GetVersionId(It.IsAny <IXVersion>())).Returns("Sw2020");
            mock.Setup(m => m.ParseVersion(It.IsAny <string>())).Returns(new Mock <IXVersion>().Object);

            var modelMock  = mock.Object;
            var msgSvcMock = new Mock <IMessageService>().Object;
            var vm         = new BatchManagerVM(modelMock, msgSvcMock);

            vm.Document = new BatchDocumentVM("", new BatchJob(), modelMock, msgSvcMock);

            vm.Document.Input.Add("D:\\folder1");
            vm.Document.Input.Add("D:\\folder2");
            vm.Document.Filters.Clear();
            vm.Document.Filters.Add(new FilterVM("*.sld*"));
            vm.Document.Macros.Add(new MacroData()
            {
                FilePath = "C:\\macro1.swp"
            });
            vm.Document.Macros.Add(new MacroData()
            {
                FilePath = "C:\\macro2.swp"
            });
            vm.Document.Settings.IsTimeoutEnabled        = true;
            vm.Document.Settings.Timeout                 = 30;
            vm.Document.Settings.OpenFileOptionSilent    = true;
            vm.Document.Settings.OpenFileOptionReadOnly  = true;
            vm.Document.Settings.StartupOptionBackground = true;
            vm.Document.Settings.StartupOptionSilent     = false;
            vm.Document.Settings.StartupOptionSafe       = false;
            vm.Document.Settings.Version                 = SwApplicationFactory.CreateVersion(SwVersion_e.Sw2020);

            vm.Document.RunJobCommand.Execute(null);

            Assert.IsTrue(new string[] { "*.sld*" }.SequenceEqual(opts.Filters));
            Assert.IsTrue(new string[] { "C:\\macro1.swp", "C:\\macro2.swp" }.SequenceEqual(opts.Macros.Select(m => m.FilePath)));
            Assert.IsTrue(new string[] { "D:\\folder1", "D:\\folder2" }.SequenceEqual(opts.Input));
            Assert.AreEqual(30, opts.Timeout);
            Assert.AreEqual(OpenFileOptions_e.Silent | OpenFileOptions_e.ReadOnly | OpenFileOptions_e.ForbidUpgrade, opts.OpenFileOptions);
            Assert.AreEqual(StartupOptions_e.Background, opts.StartupOptions);
            Assert.AreEqual("Sw2020", opts.VersionId);
        }
예제 #21
0
        static void Main(string[] args)
        {
            var sldProcess = Process.GetProcessesByName("SLDWORKS");

            if (!sldProcess.Any())
            {
                Console.WriteLine("No SolidWorks opened");
            }
            else
            {
                var app = SwApplicationFactory.FromProcess(sldProcess.First());

                ISldWorks sw = app.Sw;
            }

            Console.ReadLine();
        }
예제 #22
0
파일: Program.cs 프로젝트: EddyAlleman/xcad
        static void Main(string[] args)
        {
            try
            {
                var app = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020,
                                                      ApplicationState_e.Default);

                //var app = SwApplicationFactory.FromProcess(Process.GetProcessesByName("SLDWORKS").First());

                //CustomServices();

                //Progress(app);

                //SketchSegmentColors(app);

                //CreateDrawingView(app);

                //var sw = Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application")) as ISldWorks;
                //sw.Visible = true;

                //var app = SwApplication.FromPointer(sw);

                //CreateSketchEntities(app);

                //TraverseSelectedFaces(app);

                //CreateSweepFromSelection(app);
                //CreateTempGeometry(app);

                //CreateSweepFromSelection(app);
            }
            catch
            {
            }

            Console.ReadLine();
        }
예제 #23
0
        public void IsVersionNewerOrEqualTest()
        {
            var sw2017sp23Mock = new Mock <SldWorks>();

            sw2017sp23Mock.Setup(m => m.RevisionNumber()).Returns("25.2.3");
            var app = SwApplicationFactory.FromPointer(sw2017sp23Mock.Object);

            var r1 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2017);
            var r2 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2017, 2);
            var r3 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2017, 2, 3);
            var r4 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2017, 3);
            var r5 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2017, 1);
            var r6 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2016, 4);
            var r7 = app.IsVersionNewerOrEqual(SwVersion_e.Sw2018, 0);

            Assert.IsTrue(r1);
            Assert.IsTrue(r2);
            Assert.IsTrue(r3);
            Assert.IsFalse(r4);
            Assert.IsTrue(r5);
            Assert.IsTrue(r6);
            Assert.IsFalse(r7);
            Assert.Throws <ArgumentException>(() => app.IsVersionNewerOrEqual(SwVersion_e.Sw2017, null, 1));
        }
예제 #24
0
파일: Program.cs 프로젝트: windygu/xcad
        static void Main(string[] args)
        {
            try
            {
                //var app1 = Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));

                ISwApplication app = null;
                DateTime       start;
                Process        prc = null;

                //var start = DateTime.Now;
                //var app = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020);
                //Console.WriteLine($"Default: {(DateTime.Now - start).TotalMilliseconds}");
                //var prc = Process.GetProcessById(app.Sw.GetProcessID());
                //prc.Kill();

                //start = DateTime.Now;
                //app = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020, ApplicationState_e.Silent);
                //Console.WriteLine($"Silent: {(DateTime.Now - start).TotalMilliseconds}");
                //prc = Process.GetProcessById(app.Sw.GetProcessID());
                //prc.Kill();

                //start = DateTime.Now;
                //app = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020, ApplicationState_e.Safe);
                //Console.WriteLine($"Safe: {(DateTime.Now - start).TotalMilliseconds}");
                //prc = Process.GetProcessById(app.Sw.GetProcessID());
                //prc.Kill();

                //start = DateTime.Now;
                //app = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020, ApplicationState_e.Hidden);
                //Console.WriteLine($"Hidden: {(DateTime.Now - start).TotalMilliseconds}");
                //prc = Process.GetProcessById(app.Sw.GetProcessID());
                //prc.Kill();

                start = DateTime.Now;
                app   = SwApplicationFactory.Create(Xarial.XCad.SolidWorks.Enums.SwVersion_e.Sw2020, ApplicationState_e.Background);
                Console.WriteLine($"Background: {(DateTime.Now - start).TotalMilliseconds}");
                //prc = Process.GetProcessById(app.Sw.GetProcessID());
                //prc.Kill();

                //var app = SwApplicationFactory.FromProcess(Process.GetProcessesByName("SLDWORKS").First());
                Console.ReadLine();
                return;

                var o = app.Documents.Open(@"C:\Users\artem\OneDrive\xCAD\TestData\foreign.IGS");
                var p = app.Documents.NewPart();
                var d = app.Documents.NewDrawing();
                var a = app.Documents.NewAssembly();

                //SketchSegmentColors(app);

                //CreateDrawingView(app);

                //var sw = Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application")) as ISldWorks;
                //sw.Visible = true;

                //var app = SwApplication.FromPointer(sw);

                //CreateSketchEntities(app);

                //TraverseSelectedFaces(app);

                //CreateSweepFromSelection(app);
                //CreateTempGeometry(app);

                //CreateSweepFromSelection(app);
            }
            catch
            {
            }
        }
예제 #25
0
        internal ISldWorks Start(Action <Process> startHandler, CancellationToken cancellationToken)
        {
            SwVersion_e?vers = null;

            if (m_Version != null)
            {
                vers = m_Version.Major;
            }

            var args = new List <string>();

            if (m_State.HasFlag(ApplicationState_e.Safe))
            {
                args.Add(SwApplicationFactory.CommandLineArguments.SafeMode);
            }

            if (m_State.HasFlag(ApplicationState_e.Silent))
            {
                args.Add(SwApplicationFactory.CommandLineArguments.SilentMode);
            }

            if (m_State.HasFlag(ApplicationState_e.Background))
            {
                args.Add(SwApplicationFactory.CommandLineArguments.BackgroundMode);
            }

            var swPath = FindSwAppPath(vers);

            var prcInfo = new ProcessStartInfo(swPath, string.Join(" ", args));

            if (m_State.HasFlag(ApplicationState_e.Hidden))
            {
                prcInfo.UseShellExecute = false;
                prcInfo.CreateNoWindow  = true;
                prcInfo.WindowStyle     = ProcessWindowStyle.Hidden;
            }

            var prc = Process.Start(prcInfo);

            startHandler.Invoke(prc);

            try
            {
                ISldWorks app;
                do
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        throw new AppStartCancelledByUserException();
                    }

                    app = RotHelper.TryGetComObjectByMonikerName <ISldWorks>(SwApplicationFactory.GetMonikerName(prc));
                    Thread.Sleep(100);
                }while (app == null);

                if (m_State.HasFlag(ApplicationState_e.Hidden))
                {
                    app.Visible = false;
                }

                return(app);
            }
            catch
            {
                if (prc != null)
                {
                    try
                    {
                        prc.Kill();
                    }
                    catch
                    {
                    }
                }

                throw;
            }
        }
예제 #26
0
 public IEnumerable <IXVersion> GetInstalledVersions()
 => SwApplicationFactory.GetInstalledVersions();