Я пытаюсь использовать dll в моей программе на c #, но я просто не могу заставить ее работать. Я сделал тестовое приложение, показанное ниже. Возвращаемое значение равно 0, однако на самом деле оно не выполняет то, что должно.
Тогда как следующая команда работает:
rundll32 cmproxy.dll,SetProxy /source_filename proxy-1.txt /backup_filename roxy.bak /DialRasEntry NULL /TunnelRasEntry DSLVPN /Profile "C:\Documents and ettings\Administrator\Application Data\Microsoft\Network\Connections\Cm\dslvpn.cmp"
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Net;
using WUApiLib;
namespace nac
{
class Program
{
[DllImport("cmproxy.dll", CharSet = CharSet.Unicode)]
static extern int SetProxy(string cmdLine);
static void Main(string[] args)
{
string cmdLine = @"/source_filename proxy-1.txt /backup_filename proxy.bak /DialRasEntry NULL /TunnelRasEntry DSLVPN /Profile ""C:\Documents and Settings\Administrator\Application Data\Microsoft\Network\Connections\Cm\dslvpn.cmp""";
Console.WriteLine(SetProxy(cmdLine));
}
}
}
Вот содержимое команды dumpbin / exports
File Type: DLL
Section contains the following exports for cmproxy.dll
00000000 characteristics
3E7FEF8C time date stamp Tue Mar 25 05:56:28 2003
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001B68 SetProxy
Summary
1000 .data
1000 .reloc
1000 .rsrc
2000 .text
Когда это работает, он устанавливает прокси-сервер для подключения VPN.
EDIT:
Я хочу избежать запуска rundll32 из system.process
Я также могу предоставить ссылку как на dll, так и на мое тестовое приложение. Хотя код, вставленный выше, это все, что он содержит, и я думаю, что dll доступна из набора ресурсов сервера.
UPDATE:
Я написал тестовую DLL на c ++, которая просто повторяет аргументы, которые ему даны. Он работает, но он говорит
Неверный дескриптор