Laden...

Forenbeiträge von iAlex Ingesamt 8 Beiträge

06.10.2009 - 12:38 Uhr

Was spricht denn gegen Konfig-Daten, die binär und/oder verschlüsselt hinterlegt sind? Alles andere ist meiner Meinung nach mit Kanonen auf Spatzen geschossen...
Christian

Nun es geht aber darum, dass ich nur eine verdammte exe-Datei versenden brauche. Halt wie eine Setup.exe.

Also benötigte ich nur eine Methode, die es mir erlaubt, einen String in Resources permanent zu ändern. (Bin halt leider zu doof für UpdateResource und weiß sowieso nix mit Pointern anzufangen 😉

04.10.2009 - 11:24 Uhr

Weil das ganze programm eben nur aus einer .exe bestehen soll 😉
Es ist ja eine Art "Installer"

03.10.2009 - 20:34 Uhr
  1. Resource-Datei in der *.exe "embedden" und diese Resouce-Datei dann in der *.exe ändern

Habe jetzt diesen Codeschnipsel gefunden, weiß da aber nichts mit anzufangen. Könnte mir das einer erläutern, wie ich die Funktion Nutze?

[DllImport("kernel32.dll", SetLastError = true)]
        static extern bool UpdateResource(IntPtr hUpdate, String lpType, String lpName, ushort wLanguage, IntPtr lpData, uint cbData);
02.10.2009 - 19:25 Uhr

Der Sinn des Programms ist es, dass mein Downloader abgeändert werden kann, damit andere RPG-Maker-Entwickler ihn benutzen können. Da wären offene Configs nicht so angebracht 😉

02.10.2009 - 17:31 Uhr

Hallo,

ich habe einen kleinen Downloader entwickelt, den ich gerne Verteilen würde und suche momentan eine Möglichkeit, dass ein Benutzer das Programm abändern kann (mit jeweils einer geänderten Klasse, in der sich 3 "Konfigurationsvariablen" befinden)

Gibt es da eine Möglichkeit, eine Klasse nachträglich (mit overwrite) einzufügen?

Ein Beispiel für eine Klasse, die vom Benutzer "personalisiert" werden soll:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CanasCorpDownloader
{
    static class GVar
    {
        public static string source;
        public static string target;
        public static string nooffiles;
        public readonly static string gamename = "Daylight";
        public readonly static string gamexml = "http://ccload.cherrytree.at/dl/dl.xml";
        public readonly static string gameimageurl = "http://ccload.cherrytree.at/dl/UpdateHead.png";
    }
}
27.09.2009 - 16:32 Uhr

Gelöst: Ganz dummer Fehler. Habe vergessen den webResponse zu schließen....

27.09.2009 - 14:39 Uhr

Habe mal ein paar Haltepunkte gesetzt. Das Programm bleibt genau hier stehen:

Stream strResponse = wcDownload.OpenRead(source);
FileStream strLocal = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);

Warum? Ich habe keine Ahnung!

Edit: Mal etwas gewartet, siehe da:

System.Net.WebException wurde nicht behandelt.
Message="Timeout für Vorgang überschritten"
Source="System"
StackTrace:
bei System.Net.WebClient.OpenRead(Uri address)
bei CanasCorpDownloader.Form1.DownloadFile(String filename, String source, String fn) in C:\Users\Alexander\Documents\Visual Studio 2008\Projects\CanasCorpDownloader\CanasCorpDownloader\Form1.cs:Zeile 62.
bei CanasCorpDownloader.Form1.DoWork() in C:\Users\Alexander\Documents\Visual Studio 2008\Projects\CanasCorpDownloader\CanasCorpDownloader\Form1.cs:Zeile 155.
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

26.09.2009 - 14:30 Uhr

Hallo,
habe das Problem, dass mir ein Thread, der eine XML-Datei auslesen soll und gff. Dateien herunterladen soll "stehen bleibt"


        private void DownloadFile(string filename, string source, string fn)
        {
            using (WebClient wcDownload = new WebClient())
            {
                    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(source);
                    
                    webRequest.Credentials = CredentialCache.DefaultCredentials;
                    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                    Int64 fileSize = webResponse.ContentLength;

                    Stream strResponse = wcDownload.OpenRead(source);
                    FileStream strLocal = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);

                    int bytesSize = 0;
                    byte[] downBuffer = new byte[2048];
                    while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)
                    {
                        strLocal.Write(downBuffer, 0, bytesSize);
                        string back = "Herunterladen von " + fn + " - " + strLocal.Length / 1024 + "kB/" + fileSize / 1024 + "kB";
                        report(back, Convert.ToInt32((strLocal.Length * 100) / fileSize));
                    }
                    report("Nächste Datei laden...", 0);
                    strResponse.Close();
                    strLocal.Close();
                    return;
                }
                
                
            
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            Thread dowork = new Thread(DoWork);
            dowork.Start();
            report += new ReportProgress(Form1_report);
            finished += new Ready(Form1_finished);
        }

        public void Form1_finished()
        {
            if (this.InvokeRequired == true)
            {
                ReadyCallback callback = new ReadyCallback(finished);
                try
                {
                    this.Invoke(callback, new object[] { });
                }
                catch { }
            }
            else
            {
                
                btnAbort.Visible = false;
                StartGame.Visible = true;
                label1.Text = "Alle Dateien überprüft und validiert - Spiel kann gestartet werden!";
            }
        }

        void Form1_report(string e, int f)
        {
            if (this.InvokeRequired == true)
            {
                ReportProgressCallback callback = new ReportProgressCallback(report);
                try
                {
                    this.Invoke(callback, new object[] { e, f });
                }
                catch { }
            }
            else
            {

                lblStatus.Text = e;
                pgbStatus.Value = f;
            }
        }

        private void DoWork()
        {

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("http://av3s.org/pwht/pwht.xml");
            string xPath = "files/file";
            GVar.nooffiles = xmlDoc.SelectNodes(xPath).Count.ToString();
            foreach (XmlNode node in xmlDoc.SelectNodes(xPath))
            {
                GVar.source = node.SelectSingleNode("source").InnerText;
                GVar.target = Application.StartupPath + "/" + node.SelectSingleNode("filename").InnerText;
                if (!File.Exists(Application.StartupPath + "/" + node.SelectSingleNode("filename").InnerText))
                {
                    DownloadFile(GVar.target, GVar.source, node.SelectSingleNode("filename").InnerText);
                }
                else if (Datei2MD5(Application.StartupPath + "/" + node.SelectSingleNode("filename").InnerText) != node.SelectSingleNode("md5").InnerText)
                {
                    DownloadFile(GVar.target, GVar.source, node.SelectSingleNode("filename").InnerText);
                }
                else
                {
                    
                }
                
            }
            finished();
        }

        private void StartGame_Click(object sender, EventArgs e)
        {
            Process start = new Process();
            start.StartInfo.FileName = "RPG_RT.exe";
            start.Start();
        }
    }
}

Nach dem Download einer Datei läuft der Thread ohne etwas zu tun einfach weiter. Starte ich das programm neu lädt er jedoch die nächste Datei...