Тема: Добавить путь доступа к вспомогательным файлам. C#

Здравствуйте!

Как можно добавить путь доступа к вспомогательным файлам с помощью C#.

Пробовал так:

        using Autodesk.AutoCAD.ApplicationServices;
        using Autodesk.AutoCAD.EditorInput;
        using System;
  
        public void BuildSupporPath()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

            string support_path = Application.GetSystemVariable("ACADPREFIX") as string;
            string new_support_path = support_path + "D:\\Program Files\\AcadPlagins;";

            try
            {
                Application.SetSystemVariable("ACADPREFIX", new_support_path);
            }
            catch
            {
                ed.WriteMessage("\n*Cancel*.");
            }
        }

Но не получилось.

Re: Добавить путь доступа к вспомогательным файлам. C#

Эта переменная только для чтения.
Нужно в реестр лезть.
На сайте у Андрея есть решение, если он не против, вот ссылка:
https://sites.google.com/site/bushmansn … ami-poiska

Re: Добавить путь доступа к вспомогательным файлам. C#

Вильдар пишет:

Эта переменная только для чтения.

Нужно в реестр лезть.

На сайте у Андрея есть решение, если он не против, вот ссылка:

https://sites.google.com/site/bushmans...ami-poiska

А в VBA можно это сделать без залезания в реестр. Вот пример https://www.caduser.ru/forum/topic47092.html

Re: Добавить путь доступа к вспомогательным файлам. C#

Да, можно и так, через com.

Re: Добавить путь доступа к вспомогательным файлам. C#

Вильдар пишет:

Да, можно и так, через com.

А как с помощью C#?

(изменено: Вильдар, 3 февраля 2012г. 20:47:45)

Re: Добавить путь доступа к вспомогательным файлам. C#

Подключить библ. акада в референсах (в закладке COM).
Ну и написать примерно так:

   using Autodesk.AutoCAD.Interop;
   ...
   var acad = (AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
   acad.Preferences.Files.SupportPath += ";[добавляемый путь]";  
   ... 

(изменено: Александр Пекшев aka Modis, 4 февраля 2012г. 22:32:23)

Re: Добавить путь доступа к вспомогательным файлам. C#

Если я правильно понял о чем вы, то:

public static class SetEnv
    {
        [System.Security.SuppressUnmanagedCodeSecurity]
        // Для AutoCAD 2007 и выше:
            [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode ,EntryPoint = "acedGetEnv")]
        extern static private Int32 acedGetEnv(string var, StringBuilder val);
        [System.Security.SuppressUnmanagedCodeSecurity]
        // Для AutoCAD 2007 и выше:
            [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode ,EntryPoint = "acedSetEnv")]
        extern static private Int32 acedSetEnv(string var, string val);

        static private void AddPath(string path)
        {
            StringBuilder buf = new StringBuilder(16536);
            acedGetEnv("ACAD", buf);
            buf.Append(";"); buf.Append(path);
            acedSetEnv("ACAD", buf.ToString());
        }
        
        static public void AddSupportFiles()
        {
            AddPath(Path.Combine(ModPlusVariables.CurDir, "Res"));
            //AddPath(Path.Combine(ModPlusVariables.CurDir, "Data"));
        }
        static public void RemoveSupportFiles()
        {
            try
            {
                string str1 = Path.Combine(ModPlusVariables.CurDir, "Res");
                //string str2 = Path.Combine(ModPlusVariables.CurDir, "Data");
                StringBuilder buf = new StringBuilder(16536);
                acedGetEnv("ACAD", buf);
                buf.Replace(str1, "");
                //buf.Replace(str2, "");
                buf.Replace(";;", ";");
                acedSetEnv("ACAD", buf.ToString());
            }
            catch (Autodesk.AutoCAD.Runtime.Exception)
            { System.Windows.MessageBox.Show("Ошибка удаления путей поддержки"); }
        }
    }

Примечание - ModPlusVariables.CurDir - это папка расположения исполняемого dll-файла. Находится так
public static string CurDir = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName;

З.Ы. Эта тема вроде уже обсуждалась...