我正在尝试将数据发送到我的asp.net网页上用C#编写的正在运行的Windows窗体应用程序。 当我从网页上调用它时,应用程序没有启动的问题,但是如果我尝试从命令行运行它。
这是在asp.net中启动我的应用程序的代码部分
protected void Page_Load(object sender, EventArgs e)
{
// ClientScript.RegisterStartupScript(GetType(), "Javascript", "javascript:connectSocketServer(); ", true);
SecureString sc = new SecureString();
string Source = "*****";
foreach (char c in Source.ToCharArray())
{
sc.AppendChar(c);
}
ProcessStartInfo i = new ProcessStartInfo(@"C:\******\myapp.exe", "test");
i.UserName = "******";
i.UseShellExecute = false;
i.Password = sc;
i.Verb = "runas";
Process p = new Process();
p.StartInfo = i;
p.Start();
}
这是我的应用程序中的代码
static System.Threading.Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
[STAThread]
static void Main(params string[] Arguments)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 mf = new Form1();
if (mutex.WaitOne(TimeSpan.Zero, true))
{
Application.Run(mf);
mutex.ReleaseMutex();
}
else
{
MessageBox.Show("only one instance at a time");
mf.SendData(Arguments);
}
}
并且在表单中有一个名为SendData的公共函数将处理数据...
因此,如果我从cmd行和Pass参数运行它,SendData将被执行,但是从网页无效...
注意:我删除了应用程序在IWAP用户下的任务管理器上显示的用户名和密码信息,但表单不显示。
答案 0 :(得分:0)
您的进程正在启动,但它已停止响应,因为它限制了在ASP .NET工作进程的上下文中运行的权限。您的新流程无权访问此上下文之外的任何内容。
您可以elevate the permission of the worker process或允许IIS服务与桌面as explained in another answer进行交互。
但是,在您提到的评论中,您的Windows应用程序充当连接客户端的服务器。除非仅用于测试目的,否则我会建议通过API或Web服务对这些客户端套接字采用不同的方法。使用.NET远程处理的Windows服务甚至更好,但我建议只使用WCF。
答案 1 :(得分:-2)
Tested.Hope这将解决您的问题。使用Try Catch块
是一个好习惯protected void Page_Load(object sender, EventArgs e)
{
SecureString sc = new SecureString();
string Source = "*****";
foreach (char c in Source.ToCharArray())
{
sc.AppendChar(c);
}
sc.MakeReadOnly();
try
{
ProcessStartInfo i = new ProcessStartInfo(@"C:\******\myapp.exe", "test");
i.Domain = "*****";
i.UserName = "*****";
i.UseShellExecute = false;
i.CreateNoWindow = true;
i.RedirectStandardOutput = true;
i.Password = sc;
i.Verb = "runas";
Process p = new Process();
p = Process.Start(i);
}
catch (Win32Exception w32E)
{
// Display Some Message
}
}