Замена / Добавление ресурсов (значок) программно в C #? - PullRequest
1 голос
/ 08 июня 2010

Я пытаюсь заменить (или добавить, если он не существует) значки из файлов .exe с помощью c #.

Пока я получил это:

        string filename = "c:\\test.exe";

        IntPtr hResource = BeginUpdateResource(filename, true);
        if (hResource.ToInt32() == 0)
            throw new Exception("File Not Found");

        byte[] ico = System.IO.File.ReadAllBytes("C:\\icon.ico");
        IntPtr unmanagedPointer = Marshal.AllocHGlobal(ico.Length);
        Marshal.Copy(ico, 0, unmanagedPointer, ico.Length);

        if (UpdateResource(hResource, "Icon", "1", 1033, unmanagedPointer, Convert.ToUInt32(ico.Length)) != false)
        {
            MessageBox.Show("Updated");
            EndUpdateResource(hResource, false);
        }

        Marshal.FreeHGlobal(unmanagedPointer);

«Значок», «1», 1033 <- я получил эти данные, открыв test.exe с помощью <a href="http://www.angusj.com/resourcehacker/" rel="nofollow noreferrer"> Resource Hacker .

Я получаю сообщение "Обновлено", и если я открываю полученный exe-файл в Resource Hacker, ресурс заменяется, но значок не появляется, он просто пуст. Также этот код не заменит тип «Icon» в ресурсе, он удалит все и добавит этот «Icon», и если я использую BeginUpdateResource (path, false ); он также не заменит его, но добавит ДРУГОЙ «значок».

Где найти пример замены / добавления значка с помощью c # без учета имени, которое ресурс использует для значка, или если ресурс не существует?


...