Я создал небольшую консольную программу на C #, которая обрабатывает и экспортирует некоторые вещи из MSProject. После того, как я установил Microsoft Server 2008 и протестировал свою программу с консоли. Затем в качестве последнего шага я установил Apache&php, но я не смог заставить мою программу работать по вызовам php. Я думаю, что это ошибки разрешения, но я добавил группу «Все» для всех exes (MSProject.exe, myconsoleapp.exe), а также msprojectfile.mpp с полным контролем (я знаю, что я не должен этого делать, но сначала я хочу это работать).
Еще несколько вещей, которые я попробовал:
Я проверил, если входные параметры из php неверны.
Я проверил, работает ли другая маленькая программа (exe, batch и т. Д.).
Проверенная версия severl с локальной консоли.
Я пытался дать спать, так как консоль
так далее…
Вот несколько кодов:
PHP:
exec("C:\Apache24\htdocs\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe C:/Apache24/htdocs/mympp.mpp 1 data1 data2 data3 data4 data5 data6 data7 data8 data9 data10 data11 2>&1", $output, $answer);
echo "answer = " . $answer;
var_dump($output)
ConsoleApp:
static void Main(string[] args)
{
for (int i = 0; i < 13; i++)
{
//Writing out some debug info
Console.WriteLine(i.ToString() + ":" + args[i]);
}
//<Setup>
Microsoft.Office.Interop.MSProject.ApplicationClass msProjectApp;
Project project;
Thread.Sleep(1000);
Init(args, out msProjectApp, out project); //This Includes Leveling Reset
return;
//</Setup>
}
private static void Init(string[] args, out Microsoft.Office.Interop.MSProject.ApplicationClass msProjectApp, out Project project)
{
msProjectApp = new Microsoft.Office.Interop.MSProject.ApplicationClass();
Thread.Sleep(2000);
//msProjectApp.AppMaximize(); //Maybe Delete
//Where args[0] is the msprojectfile.mss file location
LoadFromMPPFile(args[0], msProjectApp, out project);
Thread.Sleep(2000);
project.LevelClearDates();
}
private static void LoadFromMPPFile(string location,Microsoft.Office.Interop.MSProject.ApplicationClass msProjectApp,out Project project)
{
object missingValue = System.Reflection.Missing.Value;
//Dies at the next row
msProjectApp.FileOpenEx(location,
missingValue, missingValue, missingValue, missingValue,
missingValue, missingValue, missingValue, missingValue,
missingValue, missingValue, PjPoolOpen.pjPoolReadOnly,
missingValue, missingValue, missingValue, missingValue,
missingValue);
Thread.Sleep(1000);
project = msProjectApp.ActiveProject;
}
С этим сообщением от php:
ответ = -532459699
массив (20) {[0] => строка (35) «0: данные1» [1] => строка (3) «1: данные2» [2] => строка (6) «2: данные3» [3] => строка (4) «3: данные4» [4] => строка (4) «4: данные5» [5] => строка (6) «5: данные6» [6] => строка (4) «6 : data7 «[7] => строка (4)» 7: данные8 «[8] => строка (3)» 8: данные9 «[9] => строка (12)» 9: данные10 «[10] => строка (35) «10: данные11» [11] => строка (4) «11: данные12» [12] => строка (17) «12: данные13» [13] => строка (0) «»
Важная часть здесь:
[14] => string (166) «Необработанное исключение: System.Runtime.InteropServices.COMException (0x80010001): Вызов был отклонен вызываемым абонентом. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))«[15] => string (149)» в System.RuntimeType.ForwardCallToInvokeMember (String memberName, флаги BindingFlags, цель объекта, Int32 [] aWrapperTypes, MessageData& msgData) «[16] => string (393)» в Microsoft.Office.Interop.MSProject.ApplicationClass.FileOpenEx(Имя объекта, объект ReadOnly, объединение объектов, объект TaskInformation, таблица объектов, лист объекта, объект NoAuto, идентификатор объекта объекта, объект DatabasePassWord, идентификатор объекта формата, карта объекта, PjPoolOpen openPool, пароль объекта, объект WriteResPassword, объект IgnoreReadOnlyRecommended, объект XMLName, объект DoNotLoadFromEnterprise) «[17] => string (249)» в ….Program.LoadFromMPPFile(Расположение строки, ApplicationClass msProjectApp, Project& проект) в .. \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs: строка 194 «[18] => строка (237)» в …Program.Init(String [] args, ApplicationClass& msProjectApp, Project& проект) в … \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs: строка 186 «[19] => строка (187)» …
Задача ещё не решена.
Других решений пока нет …