Итак, у меня есть следующий код:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetDllDirectory(string dllPath);
В функции:
SetDllDirectory(@"G:\Sean\Debug\");
Assembly loadedDLL = Assembly.LoadFrom(@"G:\Sean\Debug\BonderControlPanelSim.dll", AppDomain.CurrentDomain.Evidence);
Type rtsObj = loadedDLL.GetType("Oe.Te.Ranorex.Instrument.BonderControlPanelSim");
Object obj = Activator.CreateInstance(rtsObj);
rtsObj.InvokeMember("Initialize", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { "COM3", 1, 2 });
rtsObj.InvokeMember("PushStart", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { 3 });
rtsObj.InvokeMember("Shutdown", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, null);
Однако, когда я запускаю небольшое приложение с этой функцией из той же папки, что и библиотеки DLL, проблем не возникает. Когда я перемещаю исполняемый файл на другую машину, на которую подключен G-диск, я получаю исключение безопасности.
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="UnmanagedCode"/>
Не уверен, как справиться с этим. В Ассамблею. Загрузи от меня доказательства.
Исключение выдается при первом rtsObj.InvokeMember.
Ценю вашу помощь!
РЕДАКТИРОВАТЬ: приложение фактически не запускается на других машинах. Если у меня на компьютере один исполняемый файл, он запустится.