You are not logged in.

  • Login

1

Saturday, October 23rd 2010, 10:14pm

C#-Programm läuft nicht auf anderen PCs

Hey,
ich habe mein erstes C#-Programm geschrieben und bekomme jetzt nach der Veröffentlichung von allen die Meldung, dass das Programm auf deren Rechner nicht läuft - von XP bis Win7.
Da ich auch noch nicht raus gefunden habe, wie man ein Projekt als .exe exportiert, habe ich auf "Release" gestellt, das Programm gestartet und aus diesem Verzeichnis genommen:
\Documents\Visual Studio 2010\Projects\XYZ\bin\Release
Bei mir funktioniert es ohne Probleme. Als Zielframework ist .NET 3.5 eingestellt und unter Zielplatform "Any CPU". Ich benutze auch keine exotischen Bibliotheken, unter Verweise werden mir nur System, System.Data, System.Drawing und System.Windows.Forms angezeigt.
Dazu hab ich auch gleich eine Frage, wobei liegt denn der Unterschied zwischen den Verweisen die im Projektmappen-Explorer angezeigt werden und denen im Quelltext, also:

Source code

1
2
3
4
5
6
7
8
9
10
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Security.Cryptography;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

Wenn ich manuell Verweise im Projektmappen-Explorer hinzufüge, dann gibt es dieselben wie im Quelltext, z.B. System.Windows.Forms, jedoch gibt es andere wie System.Diagnostics die ich im Projektmappen-Explorer nicht hinzufügen kann.

So zurück zum Hauptproblem ^^
Hat noch jemand eine Idee, weshalb es nicht auf anderen Rechnern funktioniert? Ich bin eher PHP-Programmierer und wie gesagt, ist mein erstes C#-Programm, weshalb auch noch nicht so viel Ahnung vorhanden ist :P

Grüße

2

Sunday, October 24th 2010, 12:11pm

Was heißt es läuft nicht? Was für ein Fehler kommt denn. Bedenke, dass es so gut wie unmöglich ist unsignierte .NET-Programme von einem Netzlaufwerk zu starten. Du bekommst dann beim starten eine SecurityException.

3

Sunday, October 24th 2010, 1:17pm

Die Fehlermeldung war sowas wie "Das Programm funktioniert nicht mehr ... Soll im Internet nach einer Lösung gesucht werden?". Also ein komplett Absturz direkt nach dem Starten des Programms.
Bedenke, dass es so gut wie unmöglich ist unsignierte .NET-Programme von einem Netzlaufwerk zu starten

Whuat? ^^

4

Sunday, October 24th 2010, 1:25pm

Wenn das Programm auf einem Netzlaufwerk liegt musst du dir das erst lokal rüberkopieren und dann starten und nicht direkt aus dem Share. Aber dein Problem ist vermutlich ein anderes, das lässt sich aber ohne Quellcode nicht beantworten.

5

Monday, October 25th 2010, 3:02pm

hallo,

hast du .net 3.5 auf dem ausführenden pc installiert?

thx, truespin

6

Monday, October 25th 2010, 10:51pm

Ich glaube .NET 3,5 ist bei Windows 7 schon im Auslieferungszustand installiert.

7

Tuesday, October 26th 2010, 12:24am

Hmm, sorry mein Monitor ging gestern kaputt und war danach etwas beschäftigt.
Also was ich raus gefunden habe:

C# Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class Form1 : Form
    {
...
        List<int> columnWidths = new List<int>();
...
        public Form1()
        {
...
            for (int i = 0; i < listView1.Columns.Count; i++)
                columnWidths.Add(listView1.Columns[i].Width);
...
        }
        private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
        {
            listView1.Columns[e.ColumnIndex].Width = columnWidths[e.ColumnIndex];
        }

Als ich diese Stellen aus dem Quelltext nahm, hat es bei den anderen ohne Absturz funktioniert, ich hatte sogar um die for-Schleife eine try-catch Anweisung, jedoch spuckte dies keinen Fehler aus oO
Die Zeilen bewirken, dass die columns einer listview nicht in der Größe verändert werden können.

Aber nun habe ich noch ein Problem ^^
Bei Windows 7 Benutzern funktioniert folgendes ohne Probleme:

C# Quellcode

1
2
3
4
5
6
7
8
9
10
11
private void Form1_Load(object sender, EventArgs e)
        {
            HotkeyId = this.GetHashCode();
            RegisterHotKey((IntPtr)this.Handle, HotkeyId, 0x4000, 0x7A); // 0x7A = VK_F11, 0x4000 = MOD_NOREPEAT
        }
...
protected override void WndProc(ref Message msg)
        {
            if (msg.Msg == 0x312) // WM_HOTKEY = 0x0312
            {
xyz

Nur XP User haben mit diesem Abschnitt Probleme. WndProc wird bei den XP Usern noch ausgeführt, jedoch die if-Abfrage nicht, das war das was ich nach einigen Tests erfahren habe. msg.Msg ist irgendwie nie 0x312 wenn der Hotkey gedrückt wird.

8

Tuesday, October 26th 2010, 7:13am

hallo,

sry hab nicht gesehen das es für win7 sein soll... da ist .net 3.5 natürlich schon dabei ;)

aber zu deinem problem mit dem überschreiben von WndProc, hast du schon versucht die security permission auf "trusted" zu setzen? ich meine mich zu erinnern das du da ja gerade "unsicheren code" erzeugst.

versuch mal das hier:

C# Quellcode

1
2
3
4
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
        protected override void WndProc(ref Message m) 
        {
...


das ganze kannst auch hier genauer nachlesen: msdn

thx, truespin

9

Tuesday, October 26th 2010, 11:34am

Ach das hab ich vergessen zu erwähnen ^^ Hatte die Zeile Code auch über Google gefunden und ausprobiert, jedoch funktionierte es bei den XP'lern auch nicht.

This post has been edited 1 times, last edit by "chuckySTAR" (Oct 26th 2010, 11:57am)


10

Tuesday, October 26th 2010, 8:35pm

Die Original-WndProc rufst du aber zum Schluss noch auf, oder?

C# Quellcode

1
base.WndProc(ref msg);

12

Wednesday, October 27th 2010, 7:28am

guten morgen,

ich weiß du hast schon geschrieben das du als ziel .net 3.5 eingestellt hast, aber für mich kommt es trotzdem so rüber als würdest du evtl .net 4 verwenden das du auf den xp rechnern nicht drauf hast.
ein anderer grund fällt mir gerade nicht ein.

wenn die WndProc aufgerufen wird, was steht dann in msg?

thx, truespin

13

Wednesday, October 27th 2010, 12:39pm

Also unter Zielframework habe ich noch ein ".NET Framework 3.5 Client Profile". Keine Ahnung wo der Unterschied zwischen .NET Framework 3.5 und .NET Framework 3.5 Client Profile ist, aber ich kanns ja mal später testen, ob es daran lag.

WndProc wird schätzungsweise 1000 mal in der Sekunde aufgerufen ^^ Da kommt alles an Werten rein, jedoch nicht der Code für die Bestätigung, dass ein registrierter Hotkey gedrückt wurde.

14

Wednesday, October 27th 2010, 5:46pm

Was liefert RegisterHotKey denn für einen Wert zurück (wenn ungleich 0, was steht dann in GetLastError)? Mit sowenig Codeausschnitt kann man nur rumraten. Ist das was Hochgeheimes oder kannst du mehr Code zur Verfügung stellen?

15

Sunday, January 23rd 2011, 2:51am

Gleich mal vorweg: bei den Zeilen die da stehen sehe ich nur eins: DirtyCode :D
Um zu deinen Problem zu kommen, zur Verbreitung von Anwendungen des .NET solltest du deiner Solution ein Setup Projekt hinzufügen das auch die richtigen Komponenten vorhanden sind. Ansonsten ggf. fehlendes .NET Framework Installieren (3.5 ist hierbei auch nicht alles -> ServicePack), ggf. die config falls die Verwendet wird mitliefern etc. etc.

Falls es gar nicht klappt kann ich dir gern Anbieten das ganze sauber nochmal neu zu machen wenn du mir die Anforderungen nennst, bisher funktionieren alle meine Anwendungen auch auf anderen Systemen.

Similar threads

Social bookmarks