26.11.2014, 11:04 | #1 |
Участник
|
SysExcelApplication в пакетнике
Столкнулся с проблемой если код
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 день пытаюсь в пакетнике запустить Эксель, перелопатил весь форум |
|
26.11.2014, 11:23 | #2 |
Участник
|
Помнится, нужно было на всех штатных классах семейства SysExcel перебить свойство RunOn с Client на Called From.
|
|
26.11.2014, 11:30 | #3 |
Участник
|
Может быть у вас сам класс все же остался client а не called from ?
Если пакетный аос отдельный то можно его рестартовать. |
|
26.11.2014, 13:04 | #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 при этом остается в памяти |
|
26.11.2014, 13:18 | #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). |
26.11.2014, 14:51 | #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' ); // до этого уже не доходит |
|
26.11.2014, 15:26 | #7 |
Участник
|
попробовал try catch -
catch (Exception::CLRError) - ловится но без сообщений . xl.displayAlerts(false); - ставил перед add - не помогло Также см. Сохранение документа Excel - был изучен вчера, все настройки вчера сделал. eventlog - то же без сообщений (во всех разделах смотрел) |
|
26.11.2014, 15:51 | #8 |
Участник
|
Если при вызове xl.workbooks().add() возникает исключение CLRError, вероятнее всего, проблема в доступе Excel к каким-либо файлам или каталогам. В этой ситуации можно взять Process Explorer и посмотреть, какие неуспешные операции с фалами есть у процесса Excel непосредственно перед "зависанием".
|
|
|
За это сообщение автора поблагодарили: Logger (3), Stitch_MS (3), ex3em (1). |
27.11.2014, 10:35 | #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). |
27.11.2014, 14:17 | #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). |
27.11.2014, 16:33 | #11 |
Участник
|
Каюсь. Я давал права на данные папки для группы учетных записей AOS. Однако оказалось, прав на эти папки не хватало именно Network Service. Убрал Network Service из группы Power Users - все работает.
Почему идет запуск от Network Service, буду разбираться. Решение с добавлением в Power Users меня тоже не устраивало. Спасибо. |
|
|
|