2017-02-08 1 views
0

eine ausführbare Datei (.exe) auf Ressourcen hinzufügen programmatischWie kann ich programmgesteuert eine ausführbare Datei (.exe) zu Ressourcen hinzufügen?

Visual Studio 2015 - Visual C# - Windows Forms-Anwendung - .NET Framework 4.6.1

Was falsch ist, wenn ich eine ausführbare Datei hinzufügen (.exe) zu Ressourcen?

Die Ressource wird nicht mit den anderen Ressourcen auf der ListBox angezeigt, gibt keinen Fehler zurück. Die Namen der Ressourcen werden korrekt in die Listbox geladen, das Problem, wenn ich mich beim Hinzufügen der neuen Ressource nicht täusche.

private void button1_Click(object sender, EventArgs e) 
    { 
     //Add an .exe file to resources 
     byte[] xa; 

     xa = FileToByteArray(@"C:\Users\" + System.Environment.UserName + @"\Downloads\executable.exe"); 

     var str = System.Text.Encoding.Default.GetString(xa); 
     using (ResXResourceWriter resx = new ResXResourceWriter(@".\Resources.resx")) 
     { 
      resx.AddResource("myExe", xa); 
     } 
     // 
     //Add the name of existing resources into a listBox 
     ResourceManager mgr = Resources.ResourceManager; 
     ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true); 
     foreach (DictionaryEntry o in set){listBox1.Items.Add((string)o.Key);} 
     mgr.ReleaseAllResources(); 
     // 
    } 

    //Converts a file to a byte array 
    public byte[] FileToByteArray(string fileName) 
    { 
     byte[] buff = null; 
     FileStream fs = new FileStream(fileName,FileMode.Open,FileAccess.Read); 
     BinaryReader br = new BinaryReader(fs); 
     long numBytes = new FileInfo(fileName).Length; 
     buff = br.ReadBytes((int)numBytes); 
     return buff; 
    } 

Vielen Dank im Voraus für Ihre Hilfe

+0

Dies beantwortet Ihre Frage nicht, aber bitte [File.ReadAllBytes] (https://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx). –

Antwort

1

ein paar Dinge:

  • System.Text.Encoding.Default.GetString ist eine schlechte Art und Weise ausführbares Bytes zu kodieren. Wenn Sie sie überhaupt kodieren müssen (wahrscheinlich nicht - siehe unten), verwenden Sie Convert.ToBase64String.
  • AddResource hat eine Überladung, die ein Byte-Array dauert. Sie möchten wahrscheinlich that one anstelle der Codierung Ihrer Bytes verwenden.
  • Gemäß den Dokumenten von allen AddResource Überladungen: "Die Ressource wird nicht geschrieben, bis Generate aufgerufen wird." Also ruf das an.

Beachten Sie auch meinen Kommentar oben. Ihr FileToByteArray ist nur eine Neuschreibung des .NET-Standards File.ReadAllBytes.

Verwandte Themen