[英]Can´t execute file after writing it to the disk
我有一些通過 TCP 傳輸的文件。 但是,當我嘗試執行它們時,我會彈出一個 Windows 屏幕,說我應該聯系開發人員以獲取適合我電腦的版本。 文件應該正確傳輸,所以我想知道問題出在哪里。
服務器操作系統:Windows Server 2016
我的電腦操作系統:Windows 10
服務器代碼
private void SendLauncherFiles(NetworkStream stream)
{
TCPManager manager = new TCPManager();
Console.WriteLine("Sending Launcher files");
string path = System.AppDomain.CurrentDomain.BaseDirectory;
path += "LauncherFiles\\";
string[] extensions = { "LegitAimLauncher.exe", "Bleak.dll", "Jupiter.dll", "PeNet.Asn1.dll", "PeNet.dll" };
for(int i = 0; i < extensions.Length; i++)
{
path += extensions[i];
byte[] bFileData = File.ReadAllBytes(path);
string newPath = path.Replace(extensions[i], "");
path = newPath;
manager.SendInt(bFileData.Length, stream);
stream.Write(bFileData, 0, bFileData.Length);
}
}
客戶代碼
private void ReceiveFiles(NetworkStream stream)
{
TCPManager manager = new TCPManager();
string path = System.AppDomain.CurrentDomain.BaseDirectory;
path += "LauncherFiles\\";
string[] extensions = { "LegitAimLauncher.exe", "Bleak.dll", "Jupiter.dll", "PeNet.Asn1.dll", "PeNet.dll" };
for(int i = 0; i < extensions.Length; i++)
{
path += extensions[i];
int length = manager.GetInt(stream);
byte[] bFileData = new byte[length];
stream.Read(bFileData, 0, bFileData.Length);
File.WriteAllBytes(path, bFileData);
string newPath = path.Replace(extensions[i], "");
path = newPath;
}
}
TCP管理器
public void SendInt(int data, NetworkStream stream)
{
byte[] bData = BitConverter.GetBytes(data);
stream.Write(bData, 0, bData.Length);
}
public int GetInt(NetworkStream stream)
{
byte[] bData = new byte[sizeof(int)];
stream.Read(bData, 0, bData.Length);
int Data = BitConverter.ToInt32(bData, 0);
return Data;
}
編輯:忘記檢查文件大小。 所有文件的大小都為零字節,因此在發送時某處一定有錯誤。
除了檢查目標系統上安裝了正確的運行時版本等之外...
可能是當您沒有在單個Read
操作中接收到整個文件內容時?
您可以(並且應該)確保使用以下內容讀取所有數據:
(未經測試...)
var offset = 0;
while (offset < length)
{
var read = stream.Read(buffer, offset, length - offset);
if (read == 0) {
//Socket disconnected
break;
}
offset += read;
}
您可以(並且應該)對Write
調用執行類似的操作,以確保所有數據都已寫入...它不會經常發生,但確實會發生 - 出於各種不適合該線程的原因:)(墨菲定律等等!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.