# The system cannot execute the specified program?



## pepsi_gx (1. Oktober 2009)

Guten Tag,

ein Programm habe ich in VC++ geschrieben und die kopilierte .exe-Datei funktioniert gut auf meinem PC.

Aber wenn ich sie auf nem anderen PC teste, kann sie nicht ausgeführt werden mit der Warnung "The system cannot execute the specified program".

Nach Googeln kann es wahrscheinlich am Fehlen der "Run time Library" von C/C++ liegen. Microsoft bietet eine Visual C++ 2008 Package dafür an. 

Gibts vielleicht noch anderen Weg, die .exe-Datei auf anderem PC ausführen zu lassen?

PS: WinXP mit SP3 habe ich.

LG


----------



## deepthroat (1. Oktober 2009)

Hi.

Du könntest die Laufzeitbibliothek statisch mit zum Programm linken.

Ändere in den Projekteinstellungen bei C/C++ -> Codegenerierung die zu verwendende Laufzeitbibliothek von "Multithreaded-DLL" bzw. "Multithreaded-Debug-DLL" auf "Multithreaded" bzw. "Multithreaded-Debug" für das Release respektive Debug-Target.

Dann mußt du alles nochmal neu erstellen.

Gruß


----------



## pepsi_gx (1. Oktober 2009)

deepthroat hat gesagt.:


> Hi.
> 
> Du könntest die Laufzeitbibliothek statisch mit zum Programm linken.
> 
> ...



Danke, das habe ich ausprobiert, aber Fehlermeldung:

```
Error	1	Command line error D8016 : '/MTd' and '/clr' command-line options are incompatible
```


----------



## deepthroat (1. Oktober 2009)

Hi.

Schreibst du denn ein Programm für die .NET Common Language Runtime?

Wenn nicht, dann schalte die Common Language Runtime Unterstützung ab (in den Projekteigenschaften unter _Allgemein_)

Gruß


----------



## pepsi_gx (1. Oktober 2009)

deepthroat hat gesagt.:


> Hi.
> 
> Schreibst du denn ein Programm für die .NET Common Language Runtime?
> 
> ...



CLR ist aktiv, und wenn ich sie deaktiviere, kommen Fehlermeldungen:

```
Error	2	error BK1506 : cannot open file '.\Debug\xxx.sbr': No such file or directory	BSCMAKE
Error	1	fatal error C1189: #error :  Please use the /MD switch for _AFXDLL builds	C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxver_.h	81
```

Noch ne Idee?


----------



## deepthroat (1. Oktober 2009)

Wenn du ATL nicht verwendest, schalte es ab.

\edit: wenn du ATL doch verwendest, wähle dort die statische Variante aus.

Gruß


----------



## pepsi_gx (2. Oktober 2009)

Komisch ist, nach meinem Verständnis sollte eine .exe-Datei plattformunabhängig sein, oder? Aber anscheinend braucht sie trotzdem noch welche DLLs zum Ausführen.

Eine andere Möglichkeit wäre, daß ich eine .msi Install-Datei aus den nötigen DLLs und
der .exe-Datei vorbereite. Frage ist, wie?

Nach Internetrecherche habe ich ein Opensource Tool dafür gefunden. Da die Anleitung eher allgemein scheint, wie soll ich in meiner Situation machen? (Mit DLLs und .exe-Datei)

http://www.dalun.com/wix/01.09.2005.htm

Schönen Feiertag noch!


----------



## deepthroat (2. Oktober 2009)

pepsi_gx hat gesagt.:


> Komisch ist, nach meinem Verständnis sollte eine .exe-Datei plattformunabhängig sein, oder? Aber anscheinend braucht sie trotzdem noch welche DLLs zum Ausführen.


Dein Verständnis ist mangelhaft 


pepsi_gx hat gesagt.:


> Eine andere Möglichkeit wäre, daß ich eine .msi Install-Datei aus den nötigen DLLs und
> der .exe-Datei vorbereite. Frage ist, wie?


Indem du ein Setup-Projekt erstellst.

Und warum erstellst du kein statisch gelinktes Programm wie vorgeschlagen?

Gruß


----------



## pepsi_gx (2. Oktober 2009)

deepthroat hat gesagt.:


> Dein Verständnis ist mangelhaft


Sollte ich mich vielleicht schämen? :-(



deepthroat hat gesagt.:


> Indem du ein Setup-Projekt erstellst.


Meinst du direkt durch VC++? Wenn ja, eine kurze Anleitung wäre mir geholfen.



deepthroat hat gesagt.:


> Und warum erstellst du kein statisch gelinktes Programm wie vorgeschlagen?


Das will ich auf jeden Fall auch probieren. Daher habe ich die Setup-Datei als "eine andere Möglichkeit" genannt und finde die eher profesionell zu scheinen.


----------



## deepthroat (2. Oktober 2009)

pepsi_gx hat gesagt.:


> Meinst du direkt durch VC++? Wenn ja, eine kurze Anleitung wäre mir geholfen.


http://www.lmgtfy.com/?q=visual+studio+setup+erstellen+tutorial


----------



## pepsi_gx (5. Oktober 2009)

deepthroat hat gesagt.:


> Wenn du ATL nicht verwendest, schalte es ab.
> 
> \edit: wenn du ATL doch verwendest, wähle dort die statische Variante aus.
> 
> Gruß



ATL war schon immer down. Und ich hab ausprobiert, nur müssen "/clr", und "/MDd" gewählt sein, sonst Fehler.



deepthroat hat gesagt.:


> http://www.lmgtfy.com/?q=visual+studio+setup+erstellen+tutorial



Kann ich in Build-->Configuration Manager--> Active Solution Configuration "Release" wählen? Was ist der Unterschied zwischen "Release" und "Debug"? Vom Namen her klingt es mir schon very NICE. (Sorry, leider kann ich auf deinen Link nicht zugreifen).


----------



## deepthroat (5. Oktober 2009)

pepsi_gx hat gesagt.:


> ATL war schon immer down. Und ich hab ausprobiert, nur müssen "/clr", und "/MDd" gewählt sein, sonst Fehler.


Diese ganze Rumraterei was du nun eingestellt hast und was nicht, bzw. was du überhaupt benutzt bringt doch nichts. Häng am besten mal dein Projekt (vorher bereinigen!) hier an.


pepsi_gx hat gesagt.:


> Kann ich in Build-->Configuration Manager--> Active Solution Configuration "Release" wählen? Was ist der Unterschied zwischen "Release" und "Debug"? Vom Namen her klingt es mir schon very NICE.


Du kannst jede Konfiguration wählen die es gibt. Release baut eine Release-Version (ohne Debugging Informationen), die optimiert ist. Debug ist eine Konfiguration die ein Programm mit Debug-Informationen erstellt, nicht optimiert und mit zusätzlichen Checks.


pepsi_gx hat gesagt.:


> (Sorry, leider kann ich auf deinen Link nicht zugreifen).


Warum?


----------



## pepsi_gx (5. Oktober 2009)

Nun weiss ich, wie man ein Setup-Projekt erstellen kann.
http://support.microsoft.com/kb/837220/en-us

Aber wenn ich es erstelle, bekomme ich eine Fehlermeldung:

```
Error	4	'urlmon.dll' should be excluded because its source file 'C:\WINNT\system32\urlmon.dll' is under Windows System File Protection.
```

Wie kann ich damit umgehen?


----------



## deepthroat (5. Oktober 2009)

pepsi_gx hat gesagt.:


> Nun weiss ich, wie man ein Setup-Projekt erstellen kann.
> http://support.microsoft.com/kb/837220/en-us
> 
> Aber wenn ich es erstelle, bekomme ich eine Fehlermeldung:
> ...


Indem du es nicht in den Installer mit aufnimmst. Es ist eine Systemdatei - wenn du die auf einem anderen System installierst, für das die DLL nicht passt... *puff*

Gruß


----------



## pepsi_gx (5. Oktober 2009)

deepthroat hat gesagt.:


> Indem du es nicht in den Installer mit aufnimmst. Es ist eine Systemdatei - wenn du die auf einem anderen System installierst, für das die DLL nicht passt... *puff*
> 
> Gruß



Ich hab es "excluded" und es hat geklappt. 

Frage: der Datei 'urlmon.dll' bedarf mein Programm zum Ausführen. Wenn ich das Setup Projekt jetzt ohne sie auf nem anderen PC installiere, führt es nicht zum Fehler? Oder sucht er automatisch nach der ähnlichen 'urlmon.dll'  auf dem anderen PC (unter 'C:\WINNT\system32\')?


----------



## deepthroat (5. Oktober 2009)

pepsi_gx hat gesagt.:


> Frage: der Datei 'urlmon.dll' bedarf mein Programm zum Ausführen. Wenn ich das Setup Projekt jetzt ohne sie auf nem anderen PC installiere, führt es nicht zum Fehler? Oder sucht er automatisch nach der ähnlichen 'urlmon.dll'  auf dem anderen PC (unter 'C:\WINNT\system32\')?


Nein, und ja.


----------

