Добавление приложений в изначально пустой startup suite внешними средствами
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Добавление приложений в изначально пустой startup suite внешними средствами

Добавление приложений в изначально пустой startup suite внешними средствами

Ответ
Поиск в этой теме
Непрочитано 04.08.2010, 15:59 #1
Добавление приложений в изначально пустой startup suite внешними средствами
Ax3
 
Programming, automation, CADs, GISs. "Теплоком"
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306

Привет, братья по каду.

Возникла у меня такая задача.
Я сделал установщик для своих программ. Этот установщик прописывает адрес приложения в ветку реестра
Код:
[Выделить все]
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:409\Profiles\<название профиля>\Dialogs\Appload\Startup\
Все вроде нормально работает, приложения добавляются в автозагрузку.
Но есть одна проблема.
Если изначально startup suite был пуст, то добавление приложения в него данным способом не имеет эффекта до тех пор, пока не будет хоть раз выполнена команда _.appload (хотя бы даже вхолостую, без загрузки приложения, то есть _.appload и сразу отмена).

Мне это нужно для того, чтобы "влеплять" свои приложения в автозагрузку пользователям без муторного запуска автокада и прочего. То есть я запускаю установщик - и после этого у пользователя все что надо работает по идее.

Не пойму - то ли кад где-то хранит флаг, свидетельствующий о том, что startup suite пуст и незачем его даже обрабатывать, и пересматривает этот флаг только при выполнении _.appload, то ли в чем еще проблема...

Есть предположения, с чем это может быть связано?

P.S. Тему "Как сделать так, чтобы ЛИСПы не надо было перезагружать?" (http://forum.dwg.ru/showthread.php?t=8712) посмотрел, ссылка на установщик от ZZZ не работает (http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19612AN)
__________________
На LISPе можно мыслить!
Просмотров: 8961
 
Непрочитано 04.08.2010, 16:17
#2
KSI


 
Регистрация: 19.03.2004
Калининград
Сообщений: 1,842


www.autocad.ru - теперь называется www.caduser.ru
Наверное стоит посмотреть вот это
http://www.caduser.ru/forum/index.ph...#message108543
KSI вне форума  
 
Автор темы   Непрочитано 04.08.2010, 16:51
#3
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Спасибо, KSI, посмотрел.
Идея клевая, но (для моего случая):
такой вариант не избавляет от "возни" с кадом и файлами - списками приложений.
А я хочу сделать что-то типа установки, для пользователя очень напоминиющей виндовую: запустил установку - и спокойно продолжаешь заниматься своими делами. Как только пользователь запустит кад, у него все приложения уже будут установлены.
Собственно косяк-то весь вот в этой непонятной инициализации, когда изначально startup suite был пуст.
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Непрочитано 04.08.2010, 17:00
#4
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от Ax3 Посмотреть сообщение
Я сделал установщик для своих программ. Этот установщик прописывает адрес приложения в ветку реестра
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:409\Profiles\<название профиля>\Dialogs\Appload\Startup\
Объясни, как это работает. Под своим приложением, что подразумевается. На каком языке программирования.
Vildar вне форума  
 
Автор темы   Непрочитано 04.08.2010, 17:11
#5
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Код программы установки (AutoIT):
Код:
[Выделить все]
;Программа установки .lsp-приложений
;(прописывает приложения в startup suite AutoCAD-а)
;(c)Danilov_AS_aka_`Hawk`(aka_Ax3@forum.dwg.ru)
;Запрещено использовать без ссылки на автора!
$aaus__prg_name_=''
$aaus__prg_dir_=@ScriptDir
If StringRight($aaus__prg_dir_,1)<>'\' Then
	$aaus__prg_dir_=$aaus__prg_dir_ & '\'
EndIf
$aaus__prg_fld_=StringTrimRight($aaus__prg_dir_,1)
$aaus__sym_=''
$aaus__i_=0
While True
	$aaus__sym_=StringMid($aaus__prg_fld_,StringLen($aaus__prg_fld_)-$aaus__i_,1)
	If $aaus__sym_='\' Then
ExitLoop
	EndIf
	If $aaus__sym_='' Then
ExitLoop
	EndIf
	$aaus__prg_name_= $aaus__sym_ & $aaus__prg_name_
$aaus__i_=$aaus__i_+1
WEnd
$aaus__i1_=1
While True
	$aaus__subkey1_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD',$aaus__i1_)
	If @error<>0 Then
ExitLoop
	EndIf
	$aaus__i2_=1
	While True
		$aaus__subkey2_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_,$aaus__i2_)
		If @error<>0 Then
	ExitLoop
		EndIf
		$aaus__i3_=1
		While True
			$aaus__subkey3_=RegEnumKey('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles',$aaus__i3_)
			If @error<>0 Then
		ExitLoop
			EndIf
			$aaus__run_key_='HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles' & '\' & $aaus__subkey3_ & '\Dialogs' & '\Appload' & '\Startup'
			$aaus__installed_apps_qnt_=0
			$aaus__prg_installed_fnd_=False
			$aaus__i4_=1
			While True
				$aaus__par_name_=RegEnumVal($aaus__run_key_,$aaus__i4_)
				If @error<>0 Then
			ExitLoop
				EndIf
				$aaus__val_=RegRead($aaus__run_key_,$aaus__par_name_)
;MsgBox(0,'',$aaus__run_key_ & ' ' & $aaus__par_name_ & @CRLF & $aaus__val_)
				;Дальше анализ адреса, содержащегося в текущем параметре раздела.
				;Если имя приложения то же, что мы устанавливаем - просто изменить адрес.
				;Имя устанавливаемого приложения определяется по названию папки приложения.
				;Имя установленного приложения - по имени файла, извлеченного из значения параметра.
				
				Select
				Case $aaus__par_name_='NumStartup'
					$aaus__installed_apps_qnt_=$aaus__val_
				Case Else ;'#Startup'
					$aaus__fn_=''
					$aaus__sym_=''
					$aaus__i_=0
					While True
						$aaus__sym_=StringMid($aaus__val_,StringLen($aaus__val_)-$aaus__i_,1)
						If $aaus__sym_='\' Then ;конец имени файла
					ExitLoop
						EndIf
						If $aaus__sym_='' Then ;конец строки
					ExitLoop
						EndIf
						$aaus__fn_=$aaus__sym_ & $aaus__fn_
					$aaus__i_=$aaus__i_+1
					WEnd
;MsgBox(0,'',$aaus__fn_)
					If $aaus__fn_=$aaus__prg_name_ & '.lsp' Then
						RegWrite($aaus__run_key_,$aaus__par_name_,'REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')
						$aaus__prg_installed_fnd_=True
					EndIf
				EndSelect
			$aaus__i4_=$aaus__i4_+1
			WEnd ;end перебора параметров в найденном разделе
			If Not($aaus__prg_installed_fnd_) Then
				$aaus__installed_apps_qnt_=String(Number($aaus__installed_apps_qnt_)+1)
				RegWrite($aaus__run_key_,$aaus__installed_apps_qnt_ & 'Startup','REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')
				RegWrite($aaus__run_key_,'NumStartup','REG_SZ',$aaus__installed_apps_qnt_)
			EndIf
		$aaus__i3_=$aaus__i3_+1
		WEnd
	$aaus__i2_=$aaus__i2_+1
	WEnd
$aaus__i1_=$aaus__i1_+1
WEnd
RegWrite('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\' & 'addons\' & $aaus__prg_name_,'inst_location','REG_SZ',$aaus__prg_dir_)

Exit
Вкратце смысл таков.
Программа запускается из директории, содержащей программу или систему программ (пока только .lsp). Название директории считается общим названием программы/системы программ. Главный .lsp-файл (часто единственный) должен иметь такое же название.
Далее она просматривает реестр на предмет наличия веток автокадов (любых версий), просматривает все профили и во все профили в разделы реестра HKEY_CURRENT_USER\Software\AutoDesk\AutoCAD\<код версии>\<шифр версии>\Profiles\Dialogs\Appload\StartUp добавляет новый (или перезаписывает, если уже есть такой параметр для устанавливаемого приложения) параметр, значением которого является полный адрес главного файла программы. Имя добавляемого параметра соответствует правилам, используемым AutoCAD'ом, то есть <номер параметра>Startup. Ну и, ес-но, пересчитывает значение параметра NumStartup.
Такая вот бесхитростная программка.

ЗюЫю
Еще раз поясню, что все это хозяйство безупречно работает, когда на момент установки startup suite был не пуст.

{2010.08.04 18:18}
Нашел решение. Regshot выручил. Надо было еще дополнительно в реестр прописывать:
Код:
[Выделить все]
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R<версия>\ACAD-<шифр>:<язык>\Applications\AcadAppload]
"LOADCTRLS"=dword:0000000f
;тип REG_DWORD
Все, спасибо за подсказки!

Исправленный код установщика, если интересно (AutoIT,
подробнее про AutoIT см. http://www.autoitscript.com/autoit3/index.shtml):
Код:
[Выделить все]
;Ссылка на автора:
;ACAD_apps_u.setup_v1.02(c)Danilov_AS_aka_`Hawk`_2010.08.04
;При использовании обязательно сохраняйте ссылку на автора!
Global $aaus__i1_
Global $aaus__subkey1_
Global $aaus__i2_
Global $aaus__subkey2_
Global $aaus__i3_
Global $aaus__subkey3_
Global $aaus__i4_
Global $aaus__par_name_
Global $aaus__run_key_
Global $aaus__run_key1_
Global $aaus__val_
Global $aaus__fn_
Global $aaus__sym_
Global $aaus__i_
Global $aaus__installed_apps_qnt_
Global $aaus__prg_dir_
Global $aaus__prg_fld_
Global $aaus__prg_name_ ;берется как имя папки, из которой запущен установщик
Global $aaus__prg_installed_fnd_

$aaus__prg_name_=''
$aaus__prg_dir_=@ScriptDir
If StringRight($aaus__prg_dir_,1)<>'\' Then
	$aaus__prg_dir_=$aaus__prg_dir_ & '\'
EndIf
$aaus__prg_fld_=StringTrimRight($aaus__prg_dir_,1)
$aaus__sym_=''
$aaus__i_=0
While True
	$aaus__sym_=StringMid($aaus__prg_fld_,StringLen($aaus__prg_fld_)-$aaus__i_,1)
	If $aaus__sym_='\' Then
ExitLoop
	EndIf
	If $aaus__sym_='' Then
ExitLoop
	EndIf
	$aaus__prg_name_= $aaus__sym_ & $aaus__prg_name_
$aaus__i_=$aaus__i_+1
WEnd
$aaus__i1_=1
While True
	$aaus__subkey1_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD',$aaus__i1_)
	If @error<>0 Then
ExitLoop
	EndIf
	$aaus__i2_=1
	While True
		$aaus__subkey2_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_,$aaus__i2_)
		If @error<>0 Then
	ExitLoop
		EndIf
		$aaus__i3_=1
		While True
			$aaus__subkey3_=RegEnumKey('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles',$aaus__i3_)
			If @error<>0 Then
		ExitLoop
			EndIf
			$aaus__run_key_='HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles' & '\' & $aaus__subkey3_ & '\Dialogs' & '\Appload' & '\Startup'
			$aaus__run_key1_='HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Applications' & '\AcadAppload'
			$aaus__installed_apps_qnt_=0
			$aaus__prg_installed_fnd_=False
			$aaus__i4_=1
			While True
				$aaus__par_name_=RegEnumVal($aaus__run_key_,$aaus__i4_)
				If @error<>0 Then
			ExitLoop
				EndIf
				$aaus__val_=RegRead($aaus__run_key_,$aaus__par_name_)
;MsgBox(0,'',$aaus__run_key_ & ' ' & $aaus__par_name_ & @CRLF & $aaus__val_)
				;Дальше анализ адреса, содержащегося в текущем параметре раздела.
				;Если имя приложения то же, что мы устанавливаем - просто изменить адрес.
				;Имя устанавливаемого приложения определяется по названию папки приложения.
				;Имя установленного приложения - по имени файла, извлеченного из значения параметра.
				
				Select
				Case $aaus__par_name_='NumStartup'
					$aaus__installed_apps_qnt_=$aaus__val_
				Case Else ;'#Startup'
					$aaus__fn_=''
					$aaus__sym_=''
					$aaus__i_=0
					While True
						$aaus__sym_=StringMid($aaus__val_,StringLen($aaus__val_)-$aaus__i_,1)
						If $aaus__sym_='\' Then ;конец имени файла
					ExitLoop
						EndIf
						If $aaus__sym_='' Then ;конец строки
					ExitLoop
						EndIf
						$aaus__fn_=$aaus__sym_ & $aaus__fn_
					$aaus__i_=$aaus__i_+1
					WEnd
;MsgBox(0,'',$aaus__fn_)
					If $aaus__fn_=$aaus__prg_name_ & '.lsp' Then
						RegWrite($aaus__run_key_,$aaus__par_name_,'REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')
						$aaus__prg_installed_fnd_=True
					EndIf
				EndSelect
			$aaus__i4_=$aaus__i4_+1
			WEnd ;end перебора параметров в найденном разделе
			If Not($aaus__prg_installed_fnd_) Then
				$aaus__installed_apps_qnt_=String(Number($aaus__installed_apps_qnt_)+1)
				RegWrite($aaus__run_key_,$aaus__installed_apps_qnt_ & 'Startup','REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')
				RegWrite($aaus__run_key_,'NumStartup','REG_SZ',$aaus__installed_apps_qnt_)
			EndIf
			RegWrite($aaus__run_key1_,'LOADCTRLS','REG_DWORD',15)
		$aaus__i3_=$aaus__i3_+1
		WEnd
	$aaus__i2_=$aaus__i2_+1
	WEnd
$aaus__i1_=$aaus__i1_+1
WEnd
RegWrite('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\' & 'addons\' & $aaus__prg_name_,'inst_location','REG_SZ',$aaus__prg_dir_)

Exit
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 04.08.2010 в 18:38.
Ax3 вне форума  
 
Непрочитано 04.08.2010, 18:38
1 | #6
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Дошло, в ветке HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ ACAD-6001:409\Profiles\<название профиля>\Dialogs\Appload\Startup\
прописываются файлы в списке автозагрузки (чемоданчик в appload).

А ты решил обхитрить акад, сразу в реестр прописать свой файл.
Попробовал у себя, все работает, и при пустом чемоданчике, только по записи из реестра выполняется загрузка.

Может, ты в момент загрузки твоего файла выполняешь недопустимую операцию, приведи код из файла.

Опс, дописку неувидел.
А ты полиглот. Уже успел regshot заюзать. )
Vildar вне форума  
 
Автор темы   Непрочитано 04.08.2010, 19:44
#7
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


>>Vildar Спасибо, дружище, что не поленился проверить!
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Непрочитано 05.08.2010, 09:33
#8
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Я для себя узнал, что appload это приложение arx, которое как и все "наши" приложения добавляется в автозагрузку акада (в реестр), и при большом желании можно сделать аналогичное.

Спасибо тебе за тему.
Vildar вне форума  
 
Непрочитано 05.08.2010, 11:28
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Программисту работать со startup suite? Да этот "чемоданчик" - сумочка для "блондинок", чтобы складывать туда всякий хлам. Он предназначен для простых пользователей.

А нормальная программа не требует никаких "чемоданчиков". Сделать её самозагружаемой гораздо проще, чем вписывать в startup suite через реестр.
ShaggyDoc вне форума  
 
Непрочитано 05.08.2010, 14:08
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Программисту работать со startup suite? Да этот "чемоданчик" - сумочка для "блондинок", чтобы складывать туда всякий хлам. Он предназначен для простых пользователей.

А нормальная программа не требует никаких "чемоданчиков". Сделать её самозагружаемой гораздо проще, чем вписывать в startup suite через реестр.
2 ShaggyDoc: Сказал "А", говори "Б"...

По теме - способов реализации автозагрузки плагинов несколько:

1. Через тот же реестр, правда не через ту ветку, которую использовал автор, а через другую (юзать реестр для этих целей мне не нравится).
2. Написать плагин, который будет как "тяговая лошадка" загружать все остальные, согласно настройкам, указанном в некотором текстовом файле (например xml-формата). Один из вариантов такого способа я закинул сюда.
3. Выполнять загрузку плагинов с помощью автоматически загружаемых lsp-файлов (как правило - Acad.lsp, AcadDoc.lsp и т.п.) - пример здесь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 05.08.2010, 14:12
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


hwd, черный текст на темно-сером фоне почти не виден
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.08.2010, 14:16
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
hwd, черный текст на темно-сером фоне почти не виден
Подправил цвет (изначально сайт имел др. фон).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 05.08.2010, 14:31
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
ShaggyDoc: Сказал "А", говори "Б"...
Что "Б"? Как сделать? Так сколько раз обсуждалось. И указанные тобой способы возможные и правильные. Последний - самый простой (потому и надежный) - при условии правильного формирования полного имени файла.

А тут обсуждают конкретно startup suite.

Этот "прибамбас" сделан специально для "конечных" пользователей, которые откуда-то притащили программку. Которую надо загружать. И они не умеют, не знают, и не хотят знать, как это сделать "прописыванием". Вот им и помогает этот "чемодан", куда интерактивно можно чего-то набросать. Пока сами не начнут путаться уже в этих сокровищах.

И обсуждать способы чесания уха ногой мне неинтересно.

А нормальная программа:
1. Устанавливается инсталлятором.
2. Запускается без требования администраторских прав.
3. Работает без присутствия автора и на любом компьютере.
4. Пишет "куда положено", а не куда "нравится" автору.
5. Все это - с учетом требований ОС (XP, Vista, Win7) по размещению программ и данных.
6. Все это - с учетом требований AutoCAD - профили, пути и прочее.
7. Все это - с учетом возможностей конкретной среды разработки.
ShaggyDoc вне форума  
 
Непрочитано 05.08.2010, 15:04
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А нормальная программа:
1. Устанавливается инсталлятором.
2. Запускается без требования администраторских прав.
3. Работает без присутствия автора и на любом компьютере.
5. Все это - с учетом требований ОС (XP, Vista, Win7) по размещению программ и данных.
Это аксиомы.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
4. Пишет "куда положено", а не куда "нравится" автору.
Этого не понял (если речь идёт применительно к AutoCAD). Какими критериями выявляется "положенность"?
Имхо - нужно определиться, на что идёт ориентир - на работу отдельного пользователя, или на групповую работу с возможностью управления общими настройками сразу всех юзеров. Возможности групповой работы в AutoCAD реализованы через зад (имхо).
Любому автору, однозначно, будет "нравиться" такой вариант, который позволит ему разом управлять тем, что должно/не должно загружаться в AutoCAD всех пользователей сразу (или их определённых групп). Выполнять эту настройку на каждом локальном компьютере - решение не верное... Все локальные машины должны самостоятельно лезть в определённое (единое для всех) место в сети, откуда считываются настройки. Т.о. изменив настройки в одном файле - разом меняются настройки для всех юзеров. Т.е. слепо ориентироваться на то, что "нравится" AutoCAD (или ещё кому-то) - может быть не верным решением.
Хотя возможно, что ShaggyDoc имел в виду что-то другое...
Я ориентируюсь именно на групповую работу.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
6. Все это - с учетом требований AutoCAD - профили, пути и прочее.
7. Все это - с учетом возможностей конкретной среды разработки.
Этого тоже не понял - как-то туманно звучит... Прошу пояснить, если не затруднит. Локальные настройки юзера лучше хранить в изолированном хранилище профиля, а общие - в сети (имхо). Про "пути и прочее", а так же про IDE - не понял вовсе.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 05.08.2010, 20:20
#15
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Этого не понял (если речь идёт применительно к AutoCAD). Какими критериями выявляется "положенность"?
Данные "положено" хранить в %PersonalFolder%, %AppdataFolder%, %CommonAppdataFolder% и т.п. - в зависимости от характера работы программы. А не где нибудь в C:\Super-Puper и даже не в C:\Program Files\Super-Puper. Это же действует и применительно к AutoCAD. Я бы даже сказал - особенно применительно к AutoCAD, потому что "программисты" свои приложения (хотя бы на LISP) как бы настоящими не считают, и думают, что можно "как нравится".

А AutoCAD, начиная с 2004, "нравится" работать правильно. Достаточно посмотреть на организацию его собственных данных.

Цитата:
Локальные настройки юзера лучше хранить в изолированном хранилище профиля, а общие - в сети (имхо)
Конечно. Особенность AutoCAD - профили. Профиль - некая совокупность настроек. Включающая меню, пути поиска файлов поддержки. Профилей может быть сколько угодно, каждая программа может иметь свой профиль, в нем свой путь к своему автозагружаемому файлу, не конфликтующему с другими.

А вот во многих других, даже солидных программах, такого нет и таких возможностей катастрофически не хватает. Этим преимуществами AutoCAD надо умело пользоваться. Например, динамически создавать acaddoc.lsp с загрузкой всех необходимых приложений и их библиотек.

Цитата:
про IDE - не понял вовсе
Ну, так сам же писал в https://sites.google.com/site/bushma...ia-autocad/mng

Цитата:
как это ни странно, метода LoadLisp в природе нет, хотя LISP появился в AutoCAD задолго до VBA и уже успел его пережить...
Т.е. при разработке приложения в конкретной системе придется это учитывать. И ты написал, как это сделать. А можно и иначе.

А вот в LISP, например, нет возможности загрузить и использовать обычную DLL (не COM). Хотя хотелось бы. Но это приходится также учитывать.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 06.08.2010, 17:21
#16
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Смысл того, что я работаю с этим чемоданчиком для блондинок, заключается именно в том, что пользователь должен иметь возможность в любой момент отключить мои надстройки, чтобы, к примеру, проверить, как чертеж поведет себя во внешнем мире. А как вы понимаете, пользователю проще сделать это из startup suite, чем вызывать меня каждый раз или звонить и просить "отключить эту хрень на пару часов".
Нормальный инсталлятор, прописывающий приложение в ветку ...\Applications, делать достаточно проблематично, поскольку я не очень в теме, да и пользователю, опять же - неудобно делать деинсталляцию каждый раз, когда надо поработать в голом каде. А так у них у всех по умолчанию мои надстройки включены, надо отключить - они знают куда лезть, перед отключением запоминают недлинный путь к файлу и после сеанса работы в голом каде снова возвращают на место надстройки.
Плюс startup suite связан с профилем пользователя - есть вполне очевидные моменты, когда это удобнее, чем прописывать приложение в автозагрузку када независимо от профиля.
appload.arx, занимающийся в том числе обработкой startup suite - вполне себе нормальная программа, ничего в ней такого недостойного я не вижу.

Кстати, я тут еще момент обнаружил.
Если _appload ни разу в жизни када не запускалась (как частные случаи: кад либо только что установлен, либо впервые запущен в новой учетной записи), то менеджер загрузки appload.arx ваще не работает. На этот случай надо ветку ...\Applications\AcadAppload целиком определить:
Код:
[Выделить все]
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:409\Applications\AcadAppload]
"LOADCTRLS"=dword:0000000f
"LOADER"="C:\\Program Files\\AutoCAD 2008\\Appload.arx"
"DESCRIPTION"="AcadAppload Command Module"
Исправленный код установщика (все тот же AutoIT):
Код:
[Выделить все]
;ACAD_apps_u.setup_v1.03(c)Danilov_AS_aka_`Hawk`_2010.08.05.au3
Global $aaus__i1_
Global $aaus__subkey1_
Global $aaus__i2_
Global $aaus__subkey2_
Global $aaus__i3_
Global $aaus__subkey3_
Global $aaus__i4_
Global $aaus__par_name_
Global $aaus__run_key_
Global $aaus__run_key1_
Global $aaus__run_key2_
Global $aaus__val_
Global $aaus__fn_
Global $aaus__sym_
Global $aaus__i_
Global $aaus__installed_apps_qnt_
Global $aaus__prg_dir_
Global $aaus__prg_fld_
Global $aaus__prg_name_ ;берется как имя папки, из которой запущен установщик
Global $aaus__prg_installed_fnd_

$aaus__prg_name_=''
$aaus__prg_dir_=@ScriptDir
If StringRight($aaus__prg_dir_,1)<>'\' Then
	$aaus__prg_dir_=$aaus__prg_dir_ & '\'
EndIf
$aaus__prg_fld_=StringTrimRight($aaus__prg_dir_,1)
$aaus__sym_=''
$aaus__i_=0
While True
	$aaus__sym_=StringMid($aaus__prg_fld_,StringLen($aaus__prg_fld_)-$aaus__i_,1)
	If $aaus__sym_='\' Then
ExitLoop
	EndIf
	If $aaus__sym_='' Then
ExitLoop
	EndIf
	$aaus__prg_name_= $aaus__sym_ & $aaus__prg_name_
$aaus__i_=$aaus__i_+1
WEnd
$aaus__i1_=1
While True
	$aaus__subkey1_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD',$aaus__i1_)
	If @error<>0 Then
ExitLoop
	EndIf
	$aaus__i2_=1
	While True
		$aaus__subkey2_=RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_,$aaus__i2_)
		If @error<>0 Then
	ExitLoop
		EndIf
		$aaus__i3_=1
		While True
			$aaus__subkey3_=RegEnumKey('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles',$aaus__i3_)
			If @error<>0 Then
		ExitLoop
			EndIf
			$aaus__run_key_='HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Profiles' & '\' & $aaus__subkey3_ & '\Dialogs' & '\Appload' & '\Startup'
			$aaus__run_key1_='HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_ & '\' & 'Applications' & '\AcadAppload'
			$aaus__run_key2_='HKEY_LOCAL_MACHINE\SOFTWARE\AutoDesk\AutoCAD' & '\' & $aaus__subkey1_ & '\' & $aaus__subkey2_
			$aaus__installed_apps_qnt_=0
			$aaus__prg_installed_fnd_=False
			$aaus__i4_=1
			While True
				$aaus__par_name_=RegEnumVal($aaus__run_key_,$aaus__i4_)
				If @error<>0 Then
			ExitLoop
				EndIf
				$aaus__val_=RegRead($aaus__run_key_,$aaus__par_name_)
;MsgBox(0,'',$aaus__run_key_ & ' ' & $aaus__par_name_ & @CRLF & $aaus__val_)
				;Дальше анализ адреса, содержащегося в текущем параметре раздела.
				;Если имя приложения то же, что мы устанавливаем - просто изменить адрес.
				;Имя устанавливаемого приложения определяется по названию папки приложения.
				;Имя установленного приложения - по имени файла, извлеченного из значения параметра.
				
				Select
				Case $aaus__par_name_='NumStartup'
					$aaus__installed_apps_qnt_=$aaus__val_
				Case Else ;'#Startup'
					$aaus__fn_=''
					$aaus__sym_=''
					$aaus__i_=0
					While True
						$aaus__sym_=StringMid($aaus__val_,StringLen($aaus__val_)-$aaus__i_,1)
						If $aaus__sym_='\' Then ;конец имени файла
					ExitLoop
						EndIf
						If $aaus__sym_='' Then ;конец строки
					ExitLoop
						EndIf
						$aaus__fn_=$aaus__sym_ & $aaus__fn_
					$aaus__i_=$aaus__i_+1
					WEnd
;MsgBox(0,'',$aaus__fn_)
					If $aaus__fn_=$aaus__prg_name_ & '.lsp' Then
						If RegWrite($aaus__run_key_,$aaus__par_name_,'REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
						EndIf
						$aaus__prg_installed_fnd_=True
					EndIf
				EndSelect
			$aaus__i4_=$aaus__i4_+1
			WEnd ;end перебора параметров в найденном разделе
			If Not($aaus__prg_installed_fnd_) Then
				$aaus__installed_apps_qnt_=String(Number($aaus__installed_apps_qnt_)+1)
				If RegWrite($aaus__run_key_,$aaus__installed_apps_qnt_ & 'Startup','REG_SZ',$aaus__prg_dir_ & $aaus__prg_name_ & '.lsp')<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
				EndIf
				If RegWrite($aaus__run_key_,'NumStartup','REG_SZ',$aaus__installed_apps_qnt_)<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
				EndIf
			EndIf
			If RegWrite($aaus__run_key1_,'LOADCTRLS','REG_DWORD',15)<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
			EndIf
			;Обязательно записать в реестр адрес загрузчика на случай только что установленного када:
			If RegWrite($aaus__run_key1_,'LOADER','REG_SZ',RegRead($aaus__run_key2_,'AcadLocation') & '\' & 'Appload.arx')<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
			EndIf
			If RegWrite($aaus__run_key1_,'DESCRIPTION','REG_SZ','AcadAppload Command Module')<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
			EndIf
		$aaus__i3_=$aaus__i3_+1
		WEnd
	$aaus__i2_=$aaus__i2_+1
	WEnd
$aaus__i1_=$aaus__i1_+1
WEnd
If RegWrite('HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\' & 'addons\' & $aaus__prg_name_,'inst_location','REG_SZ',$aaus__prg_dir_)<>1 Then
MsgBox(16,'ACAD_apps_u.setup','Ошибка записи в реестр.' & @CRLF & 'Код ошибки: ' & String(@error))
Exit
EndIf

Exit
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 06.08.2010 в 17:51.
Ax3 вне форума  
 
Непрочитано 06.08.2010, 17:43
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Ax3 Посмотреть сообщение
пользователю проще сделать это из startup suite, чем вызывать меня каждый раз или звонить и просить "отключить эту хрень на пару часов".
Если у пользователя будет перед глазами кнопка, открывающее некое окошко, в котором ему нужно установить или наоборот убрать галочки напротив плагинов (тем самым указав что следует загружать, а что нет) - то ему будет абсолютно безразлично, через что вы там реализовываете управление (через "чемоданчик" или ещё через чего-то).

Цитата:
Сообщение от Ax3 Посмотреть сообщение
Нормальный инсталлятор, прописывающий приложение в ветку ...\Applications, делать достаточно проблематично, поскольку я не очень в теме.
Следует уточнять, что это проблематично конкретно вам, поскольку сложного в этом ничего нет.

Цитата:
Сообщение от Ax3 Посмотреть сообщение
да и пользователю, опять же - неудобно делать деинсталляцию каждый раз, когда надо поработать в голом каде.
Ужас... А зачем выполнять деинсталляцию плагина, чтобы поработать в "голом" акаде? Может вы ещё и акад будете каждый раз сносить? Почитайте о профилях автокада (arg-файлах) и разберитесь для чего они нужны/как работают, дабы не чесать ухо ногой из-за спины. Создаёте два ярлыка, завязанных на разные arg-файлы и свободно работаете в том режиме, который вам нужен в конкретный момент.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 06.08.2010, 17:59
#18
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
... чесания уха ногой...
Не думаю, что такая характеристика данной задачи уместна.

А вот писать свой менеджер автозагрузки с оконным интерфейсом только ради того, чтобы не использовать стандартные кадовские средства, по-вашему, мудро?

Про использование профилей я знаю достаточно, см. выше "startup suite связан с профилем пользователя". Этим я как раз и пользуюсь

Перегружать пользователя кнопками тоже лишний раз не хочется, если есть готовые кадовские средства, о которых они все знают.
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 06.08.2010 в 18:06.
Ax3 вне форума  
 
Непрочитано 06.08.2010, 18:13
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Ax3 Посмотреть сообщение
...
Я не ShaggyDoc - подправьте автора цитаты.
Цитата:
Сообщение от Ax3 Посмотреть сообщение
Не думаю, что такая характеристика данной задачи уместна.
"Делать деинсталляцию каждый раз, когда надо поработать в голом каде" (с) - это именно так и называется.

Цитата:
Сообщение от Ax3 Посмотреть сообщение
А вот писать свой менеджер автозагрузки с оконным интерфейсом только ради того, чтобы не использовать стандартные кадовские средства, по-вашему, мудро?
Т.е. вы утверждаете, что причиной является именно это? Ну что же.... без комментариев...
Цитата:
Сообщение от Ax3 Посмотреть сообщение
Про использование профилей я знаю достаточно, см. выше
Видимо недостаточно, иначе не было бы этого:
Цитата:
делать деинсталляцию каждый раз, когда надо поработать в голом каде
Пожалуй вам действительно не стоит лезть в ветку "Applications", а искать решения с применением "чемоданчика"...
Цитата:
Перегружать пользователя кнопками тоже лишний раз не хочется, если есть готовые кадовские средства, о которых они все знают.
Помимо кнопок существуют комбинации клавиш, риббоны, командная строка - на любителя.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 06.08.2010, 21:31
#20
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Ну хорошо. Если по существу, какие минусы использования startup suite кроме того, что им пользоваться несолидно?
Пользователи, с которыми я работаю, не отличаются стремлением пихать в него всякий мусор.
Еще раз поясню, что я стремлюсь решать задачи с минимумом отклонений от стандартных кадовских средств. Полагаю, пользователям так удобнее, особенно в условиях, когда им и так приходится пользоваться большим набором панелей, кнопок и прочего добра.

>>hwd, ShaggyDog Друзья, только по существу, без пафоса, плз. Здесь вроде не соревнование, кто умнее.
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 06.08.2010 в 21:38.
Ax3 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Добавление приложений в изначально пустой startup suite внешними средствами