【发布时间】:2016-02-14 17:39:36
【问题描述】:
作为序言 - 这是一个学校学期的项目,所以如果它有点 hacky,我很抱歉,但我相信这是一个有趣且有趣的概念。
我正在尝试在 signalR 聊天中单击(登录)按钮时强制下载可执行文件。我用 javascript 完成了大部分聊天,在 ChatHub 服务器端的工作很少。
所以我精心设计了 Javascript,当用户选中“安全聊天”复选框时,我会强制下载可执行文件(运行一些 python 取证脚本):
$("#btnStartChat").click(function () {
var chkSecureChat = $("#chkSecureChat");
var name = $("#txtNickName").val();
var proceedLogin = false;
if (chkSecureChat.is(":checked")) {
proceedLogin = chatHub.server.secureLogin();
isSecureChat = true;
} else {
proceedLogin = true;
}
chatHub.server.secureLogin 位调用我在 C# 中在服务器端创建的函数,如下所示:
public bool SecureLogin()
{
bool isDownloaded = false;
int counter = 0;
string fileName = "ForensiClean.exe";
string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string downloadPath = (userPath + "\\Downloads\\" + fileName);
// try three times
while(isDownloaded == false && counter < 3)
{
if (System.IO.File.Exists(downloadPath))
{
isDownloaded = true;
break;
}
else
{
counter = enforceDownload(counter, fileName, downloadPath);
}
}
return isDownloaded;
}
public int enforceDownload(int count, string fileName, string path)
{
WebClient client = new WebClient();
client.DownloadFileAsync(new Uri("http://myURL/Executable/" + fileName), path);
count++;
return count;
}
这两个函数看起来都很简单——我看看它是否已经下载,如果没有,我会强制下载。它在开发中工作。但是,当我发布到实际站点时,我收到了下载问题;它没有下载。
在调试这些问题时,我注意到proceedLogin 变量实际上是一个对象?!?!(如图所示)。有什么想法请帮忙,我很难过。
【问题讨论】:
-
一个小符号,你检查文件是否存在于服务器上,而不是文件是否存在于客户端。因为C#代码是在服务器上执行的。
-
这不是我正在做的@SynerCoder,
System.IO.File.Exists检查在 C# 代码中。 -
这是@Cerbrus 建议的现场直播:chat.adamschaal.com。
-
如果您的意思是让服务器下载
ForensiClean.exe,那么您当前的代码是正确的。 -
我希望客户端从我的服务器@SynerCode 下载 .exe。我想我现在明白你之前的评论了。你知道最好的方法吗?非常感谢!
标签: javascript c# asp.net web signalr