Windows forms Anwendung per Code erstellen

  • C#

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Toni03.

    Windows forms Anwendung per Code erstellen

    Hey,

    wie kann ich eine Windows Forms Anwendung in meiner Anwendung per Knopfdruck erstellen. Ich würde das dann gerne als exe ausgeben
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    @Toni03
    Du kannst Dateien zu Deinen Ressourcen hinzufügen und anschließend mit folgendem Code speichern und ausführen.

    VB.NET-Quellcode

    1. System.IO.File.WriteAllBytes("(Path)\File.exe", My.Resources.File)
    2. System.Diagnostics.Process.Start("(Path)\File.exe")
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Ich würde gerne Code generieren und dadurch ein Individuelles Programm erstellen. Das soll dann zu einer exe werden
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Toni03 Du kannst alles erstellen, wofür der (.NET-)Code verfügbar ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Habe jetzt ein wenig herum probiert. Aber ich bekomme es nicht hin, dass er mir eine Form erstellt. Wie funktioniert das?
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down

    Toni03 schrieb:

    ... Wie funktioniert das?

    Aaaaarrrrrggggg!!!!!!!! :cursing:

    Tipps für eine höhere Antwort-Quote
    tty1.net/smart-questions_de.html#before
    Bitte mal vollständig lesen und verinnerlichen !

    edit:
    Ich denke, daß du dich total übernimmst (typisch für Jungspunde :rolleyes: ), backe doch erstmal kleine Brötchen,
    das erspart dir viele Frusterlebnisse und uns Nerven !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FormFollowsFunction“ ()

    Toni03 schrieb:

    Habe jetzt ein wenig herum probiert. Aber ich bekomme es nicht hin, dass er mir eine Form erstellt. Wie funktioniert das?

    Was hast du bisher versucht? Was hat nicht geklappt? Gab es Fehlermeldungen? Verstehst du die Syntax nicht?
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Ich habe versucht eine Form zu erstellen. Habe auch die Klasse so bekommen, dass da folgendes steht (ist nur ein bsp.):
    Spoiler anzeigen

    C#-Quellcode

    1. namespace Samples {
    2. using System;
    3. using System.Windows;
    4. using System.Windows.Forms;
    5. public class Form1 : System.Windows.Forms.Form {
    6. private void Form1() {
    7. void.InitializeComponent("");
    8. }
    9. // Test Comment
    10. }
    11. }​


    Trotzdem öffnet er es als Konsole
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Du verstehst nicht, was wir brauchen.. Wir brauchen mehr Informationen. Fange bitte von vorne an: Was genau hast du vor? Sei präzise! Dann können wir dir helfen. Du willst eine .exe selbst compilen? Mit einem Programm oder wie?
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Tut mir leid, dass ich mir wieder alles aus der Nase ziehen lasse.

    Also ich möchte in meiner WinForms Anwendung eine andere WinForms Anwendung erstellen. Das erstmal nur als Form mit vllt. einem Knopf noch reichen würde. Bloß bekomme ich das nicht richtig hin. Habe auch schon viel danach gegooglet. Ich hoffe das reicht fürs erste.

    //EDIT:

    Dazu benutze ich folgenden Code:

    Spoiler anzeigen

    C#-Quellcode

    1. using Microsoft.CSharp;
    2. using System;
    3. using System.CodeDom;
    4. using System.CodeDom.Compiler;
    5. using System.IO;
    6. using System.Windows.Forms;
    7. namespace GBStudio
    8. {
    9. public partial class Form1 : Form
    10. {
    11. public Form1()
    12. {
    13. InitializeComponent();
    14. }
    15. private void CompileButton(object sender, EventArgs e)
    16. {
    17. CodeCompileUnit compileUnit = new CodeCompileUnit();
    18. CodeNamespace samples = new CodeNamespace("Samples");
    19. samples.Imports.Add(new CodeNamespaceImport("System"));
    20. samples.Imports.Add(new CodeNamespaceImport("System.Windows"));
    21. samples.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));
    22. compileUnit.Namespaces.Add(samples);
    23. CodeTypeDeclaration class1 = new CodeTypeDeclaration("Form1");
    24. class1.BaseTypes.Add(new CodeTypeReference(typeof(Form)));
    25. samples.Types.Add(class1);
    26. CodeEntryPointMethod start = new CodeEntryPointMethod();
    27. start.Name = "Form1";
    28. CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("Hello World!"));
    29. start.Statements.Add(cs1);
    30. //// Variable
    31. //CodeVariableDeclarationStatement v1 = new CodeVariableDeclarationStatement("int", "test");
    32. //Comment
    33. CodeCommentStatement comment1 = new CodeCommentStatement("Test Comment");
    34. start.Comments.Add(comment1);
    35. CodeVariableDeclarationStatement f1 = new CodeVariableDeclarationStatement("", "Form1");
    36. CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(""), "InitializeComponent", new CodePrimitiveExpression(""));
    37. f1.Statements.Add(cs2);
    38. class1.Members.Add(f1);
    39. CodeMemberMethod IC1 = new CodeMemberMethod();
    40. IC1.Name = "InitializeComponent";
    41. class1.Members.Add(start);
    42. CompileCSharpCode(Application.StartupPath + "\\" + GenerateCSharpCode(compileUnit), Application.StartupPath + "\\Test.exe");
    43. }
    44. public static string GenerateCSharpCode(CodeCompileUnit compileunit)
    45. {
    46. // Generate the code with the C# code provider.
    47. CSharpCodeProvider provider = new CSharpCodeProvider();
    48. // Build the output file name.
    49. string sourceFile;
    50. if (provider.FileExtension[0] == '.')
    51. {
    52. sourceFile = "HelloWorld" + provider.FileExtension;
    53. }
    54. else
    55. {
    56. sourceFile = "HelloWorld." + provider.FileExtension;
    57. }
    58. // Create a TextWriter to a StreamWriter to the output file.
    59. using (StreamWriter sw = new StreamWriter(sourceFile, false))
    60. {
    61. IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
    62. // Generate source code using the code provider.
    63. provider.GenerateCodeFromCompileUnit(compileunit, tw,
    64. new CodeGeneratorOptions());
    65. // Close the output file.
    66. tw.Close();
    67. }
    68. return sourceFile;
    69. }
    70. public static bool CompileCSharpCode(string sourceFile, string exeFile)
    71. {
    72. CSharpCodeProvider provider = new CSharpCodeProvider();
    73. // Build the parameters for source compilation.
    74. CompilerParameters cp = new CompilerParameters();
    75. // Add an assembly reference.
    76. cp.ReferencedAssemblies.Add("System.dll");
    77. cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
    78. // Generate an executable instead of
    79. // a class library.
    80. cp.GenerateExecutable = true;
    81. // Set the assembly file name to generate.
    82. cp.OutputAssembly = exeFile;
    83. // Save the assembly as a physical file.
    84. cp.GenerateInMemory = false;
    85. // Invoke compilation.
    86. CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);
    87. if (cr.Errors.Count > 0)
    88. {
    89. // Display compilation errors.
    90. Console.WriteLine("Errors building {0} into {1}",
    91. sourceFile, cr.PathToAssembly);
    92. foreach (CompilerError ce in cr.Errors)
    93. {
    94. Console.WriteLine(" {0}", ce.ToString());
    95. Console.WriteLine();
    96. }
    97. }
    98. else
    99. {
    100. Console.WriteLine("Source {0} built into {1} successfully.",
    101. sourceFile, cr.PathToAssembly);
    102. }
    103. // Return the results of compilation.
    104. if (cr.Errors.Count > 0)
    105. {
    106. return false;
    107. }
    108. else
    109. {
    110. return true;
    111. }
    112. }
    113. }
    114. }
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    @Toni03 Füge Deinen Code in ein leeres Projekt ein und überzeuge Dich davon, dass er compiliert.
    Bei mir tut er es nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Einfach mal nicht lauffähigen code aus dem Netz kopiert und das Forum soll es jetzt richten !?
    Klasse Vorgehensweise, einfach großartig !

    Toni03 schrieb:

    Tut mir leid, dass ich mir wieder alles aus der Nase ziehen lasse.

    Derartige Entschuldigungen sind keinen Pfifferling wert, wenn du dein Verhalten nicht zum positiven änderst !
    @RodFromGermany ,

    sorry hatte vorhin nicht viel Zeit, habe also nur den Code aus meiner Datei kopiert und hatte vergessen, dass da noch ein Fehler drinne war. Habe den jetzt behoben. So wie es jetzt ist, wollte ich es ursprünglich probieren. Steht im Comment:

    Spoiler anzeigen

    C#-Quellcode

    1. ​using Microsoft.CSharp;
    2. using System;
    3. using System.CodeDom;
    4. using System.CodeDom.Compiler;
    5. using System.IO;
    6. using System.Windows.Forms;
    7. namespace GBStudio
    8. {
    9. public partial class Form1 : Form
    10. {
    11. public Form1()
    12. {
    13. InitializeComponent();
    14. }
    15. private void CompileButton(object sender, EventArgs e)
    16. {
    17. CodeCompileUnit compileUnit = new CodeCompileUnit();
    18. CodeNamespace samples = new CodeNamespace("Samples");
    19. samples.Imports.Add(new CodeNamespaceImport("System"));
    20. samples.Imports.Add(new CodeNamespaceImport("System.Windows"));
    21. samples.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));
    22. compileUnit.Namespaces.Add(samples);
    23. CodeTypeDeclaration class1 = new CodeTypeDeclaration("Form1");
    24. class1.BaseTypes.Add(new CodeTypeReference(typeof(Form)));
    25. samples.Types.Add(class1);
    26. CodeEntryPointMethod start = new CodeEntryPointMethod();
    27. CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("Hello World!"));
    28. start.Statements.Add(cs1);
    29. //Comment
    30. CodeCommentStatement comment1 = new CodeCommentStatement("Test Comment");
    31. start.Comments.Add(comment1);
    32. //Ursprünglicher Versuch
    33. //CodeMemberMethod f1 = new CodeMemberMethod();
    34. //f1.Name = "Form1";
    35. //CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(""), "InitializeComponent", new CodePrimitiveExpression(""));
    36. //f1.Statements.Add(cs2);
    37. //class1.Members.Add(f1);
    38. CodeMemberMethod IC1 = new CodeMemberMethod();
    39. IC1.Name = "InitializeComponent";
    40. class1.Members.Add(start);
    41. CompileCSharpCode(Application.StartupPath + "\\" + GenerateCSharpCode(compileUnit), Application.StartupPath + "\\Test.exe");
    42. }
    43. public static string GenerateCSharpCode(CodeCompileUnit compileunit)
    44. {
    45. // Generate the code with the C# code provider.
    46. CSharpCodeProvider provider = new CSharpCodeProvider();
    47. // Build the output file name.
    48. string sourceFile;
    49. if (provider.FileExtension[0] == '.')
    50. {
    51. sourceFile = "HelloWorld" + provider.FileExtension;
    52. }
    53. else
    54. {
    55. sourceFile = "HelloWorld." + provider.FileExtension;
    56. }
    57. // Create a TextWriter to a StreamWriter to the output file.
    58. using (StreamWriter sw = new StreamWriter(sourceFile, false))
    59. {
    60. IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
    61. // Generate source code using the code provider.
    62. provider.GenerateCodeFromCompileUnit(compileunit, tw,
    63. new CodeGeneratorOptions());
    64. // Close the output file.
    65. tw.Close();
    66. }
    67. return sourceFile;
    68. }
    69. public static bool CompileCSharpCode(string sourceFile, string exeFile)
    70. {
    71. CSharpCodeProvider provider = new CSharpCodeProvider();
    72. // Build the parameters for source compilation.
    73. CompilerParameters cp = new CompilerParameters();
    74. // Add an assembly reference.
    75. cp.ReferencedAssemblies.Add("System.dll");
    76. cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
    77. // Generate an executable instead of
    78. // a class library.
    79. cp.GenerateExecutable = true;
    80. // Set the assembly file name to generate.
    81. cp.OutputAssembly = exeFile;
    82. // Save the assembly as a physical file.
    83. cp.GenerateInMemory = false;
    84. // Invoke compilation.
    85. CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);
    86. if (cr.Errors.Count > 0)
    87. {
    88. // Display compilation errors.
    89. Console.WriteLine("Errors building {0} into {1}",
    90. sourceFile, cr.PathToAssembly);
    91. foreach (CompilerError ce in cr.Errors)
    92. {
    93. Console.WriteLine(" {0}", ce.ToString());
    94. Console.WriteLine();
    95. }
    96. }
    97. else
    98. {
    99. Console.WriteLine("Source {0} built into {1} successfully.",
    100. sourceFile, cr.PathToAssembly);
    101. }
    102. // Return the results of compilation.
    103. if (cr.Errors.Count > 0)
    104. {
    105. return false;
    106. }
    107. else
    108. {
    109. return true;
    110. }
    111. }
    112. }
    113. }


    Dann an @FormFollowsFunction

    Herr Gott im Himmel, wenn ich jemanden brauche, der überall irgendwelche blöden Kommentare abgibt, melde ich mich bei dir. Ich war die ganze Zeit nett, Rod auch also beruhig dich und seih doch auch Nett. Ja mir ist ein Fehler unterlaufen, Na und Fehler sind menschlich. Ich bin halt manchmal ein wenig verplant. Der Code ist Kopiert, aber ich habe mich mit den Docs und dem Code befasst, sieht man vllt. auch daran, dass nicht alles 1:1 gleich ist. Und bitte sei etwas netter, das würde nähmlich jeden hier im Forum freuen. Danke
    Und auch an die moderation: falls das jetzt von mir ein wenig zu unfreundlich oder unpassend war, dann entschuldigt mich aber das musste mal gesagt werden.
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Keinerlei Eigeninitiative zu zeigen und selbstverständlich die Zeit und Energie andere auszunutzen ist nicht nett sondern *piep* !
    Also sei du doch mal so nett und gib dir mehr Mühe !
    Ich kann übrigens mit Kritik umgehen, und die muß nicht nett sein, sondern sachlich und nachvollziebar !
    @Toni03 Du compilierest den Code, der in HelloWorld.cs steht, zum Programm Test.exe.
    Genau das passiert.
    Allerdings hat das nix mit Deinem Vorhaben zu tun.
    Erstell Dir die WinForm, die Du per CodeDom erzeugen willst, zunächst im Studio, um compilierbaren Code zu haben.
    Wenn Du den hast, compilier ihn unter CodeDom.
    Zunächst musst Du herauskriegen, wie Du mehrere Dateien in Deine EXE compiliert bekommst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!