| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Столкнулся с проблемой если код  
		
		
		
		
		
		
		
	X++:     SysExcelApplication xl;
    SysExcelWorkbook    wbk;
    ;
    
    xl = SysExcelApplication_NET::construct( ClassRunMode::Server );выполнять в классе, с выставленным RunOn Server все отрабатывает. Но если тот же код запустить в пакетнике, то выполнение валится с ошибкой в журнале Олицетворенный на сервере (RunAs) сеанс попытался вызвать метод, который доступен только на клиенте. (S)\Classes\DictClass\makeObject (S)\Classes\ClassFactory\createClass - line 13 (S)\Classes\ClassFactory\makeObjectOnServer - line 3 (S)\Classes\SysExcelApplication_NET\construct - line 15 где X++: public static client server SysExcelApplication_NET construct(ClassRunMode _contructOnTier = ClassRunMode::Client) { SysExcelApplication_NET ret; ; switch (_contructOnTier) { case ClassRunMode::Called : case ClassRunMode::ClientOrServer : ret = new SysExcelApplication_NET(); break; case ClassRunMode::Client : ret = classFactory::makeObjectOnClient( classnum(SysExcelApplication_NET) ); break; case ClassRunMode::Server : ret = classFactory::makeObjectOnServer( classnum(SysExcelApplication_NET) //это то место где валится (15 строка) .... Помогите, уже 3 день пытаюсь в пакетнике запустить Эксель, перелопатил весь форум ![]() ![]()  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Помнится, нужно было на всех штатных классах семейства SysExcel перебить свойство RunOn с Client на Called From.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может быть у вас сам класс все же остался client а не called from ? 
		
		
		
		
		
		
		
	Если пакетный аос отдельный то можно его рестартовать.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			перебил свойство RunOn с Client на Called From у всех sysExcel которые были в проекте SysExcel_via_NET 
		
		
		
		
		
		
		
	так же заменил в конструкторе SysExcelWorkbook static client SysExcelWorkbook construct(... на static client server SysExcelWorkbook construct(... и в конструкторе SysExcelWorkbooks тоже static client на static client server объект SysExcelApplication создается но теперь почему-то (только в серверном режиме, в клиентском работает) перестает работать код после строки add X++:     SysExcelApplication xl;
    SysExcelWorkbook    wbk;
    ;
    xl = SysExcelApplication_NET::construct(ClassRunMode::Server);
    xl.visible( false );
    wbk = xl.workbooks().add(); //здесь перестает выполняться
wbk.saveAs(DEV_xInfoDirectoryServer( DirectoryType::Temp ) + 'test.xls' ); // до этого уже не доходиткласс SysExcelWorkbooks_NET(установлен CalledFrom) метод add() в самом конце X++: return SysExcelWorkbook::construct( version, null, workbooks_net.Add( template ) ); повторюсь, в режиме xl = SysExcelApplication_NET::construct(ClassRunMode::Client); все проходит отлично А вот ломается следующим образом - просто перестает выполняться код дальше, как будь-то дальше кода нет. Excel при этом остается в памяти  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте отловить  
		
		
		
		
		
		
		
	X++: System.Exception e; // declare ; try { ... code that can throw clr error } catch (Exception::CLRError) { e = CLRInterop::getLastException(); while( e ) { info( e.get_Message() ); e = e.get_InnerException(); } }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: ex3em (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от ex3em
			 
 
			почему-то (только в серверном режиме, в клиентском работает) перестает работать код после строки add 
		
	X++: xl = SysExcelApplication_NET::construct(ClassRunMode::Server); xl.visible( false ); wbk = xl.workbooks().add(); //здесь перестает выполняться wbk.saveAs(DEV_xInfoDirectoryServer( DirectoryType::Temp ) + 'test.xls' ); // до этого уже не доходит  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			попробовал try catch -  
		
		
		
		
		
		
		
	catch (Exception::CLRError) - ловится но без сообщений  . xl.displayAlerts(false); - ставил перед add - не помогло ![]() ![]() Также см. Сохранение документа Excel - был изучен вчера, все настройки вчера сделал. eventlog - то же без сообщений (во всех разделах смотрел)  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если при вызове xl.workbooks().add() возникает исключение CLRError, вероятнее всего, проблема в доступе Excel к каким-либо файлам или каталогам. В этой ситуации можно взять Process Explorer и  посмотреть, какие неуспешные операции с фалами есть у процесса Excel непосредственно перед "зависанием".
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (3), Stitch_MS (3), ex3em (1). | |
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Победа, нашелся затык  
		
		
		
		
		
		
		
	  с помощью Process Explorer выяснилось что в серверном режиме, при создании книги add, Excel активно начинает использовать папку C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files все процессы запущенные в серверном режиме выполняются от имени Network Service. Дать права на папку Temporary Internet Files не удается, нет вкладки Security, Дал права для Network Service в консоле Local Users And Group - управлении компьютером. Добавил Network Service в группу Power Users. Все заработало. Спасибо гуру за помощь!!! без вас я бы не добрался до решения проблемы!  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (1). | |
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Здорово, что все в итоге заработало, но для истории - небольшие уточнения. 
		
		
		
		
		
		
		
	Цитата: 
	
Цитата: 
	
		
			Сообщение от ex3em
			 
 
			Сохранение документа Excel - был изучен вчера, все настройки вчера сделал. 
		
	Цитата: 
	
Цитата: 
	
Цитата: 
	
%SystemRoot%\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows, а вот добавлять Network Service в группу Power Users - необдуманно с т.з. безопасности и принципа минимально необходимых привилегий. Network Service - это специальная "бесправная" учетная запись, единственное существенное право которой - аутентифицироваться на других хостах под учеткой "своего" хоста. В то же время, входя в Power Users, можно легко стать локальным администратором, а это фактически выводит Network Service на уровень Local System (не путать с Local Service).  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (3). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Каюсь. Я давал права на данные папки для группы учетных записей AOS. Однако оказалось, прав на эти папки не хватало именно Network Service. Убрал Network Service из группы Power Users - все работает.  
		
		
		
		
		
		
		
	Почему идет запуск от Network Service, буду разбираться. Решение с добавлением в Power Users меня тоже не устраивало. Спасибо.  | 
| 
	
 | 
| 
	
	 | 
	
		
  |