error MSB6006: "link.exe" wurde mit dem Code 1168 beendet.



  • Guten Morgen,
    ich bin über ein äußerst seltsames Problem gestoßen und ich kann mir nicht erklären was seit kurzem mit meinem Visual Studio los ist. Es fing an als ich eine D3DException Klasse in einer DLL entworfen und programmiert habe und diese sogar erfolgreich beim ersten Durchgang lief dort bekam ich eine ähnliche Fehlermeldung als ich lediglich eine Kleinigkeit geändert habe die hätte laufen müssen.

    Nun habe ich eine kleine gewöhnliche Win32 Anwendung geschrieben. Diese lief auch beim ersten ausführen ohne Probleme, doch mir ist ein Tippfehler in einer Zeichenkette aufgefallen als ich diese korrigiert habe kam diese Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: GameApplication2, Konfiguration: Debug Win32 ------
    1>LINK : fatal error LNK1168: "C:\Users\Jan\source\repos\GameApplication2\Debug\GameApplication2.exe" kann nicht zum Schreiben geöffnet werden.
    1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(720,5): error MSB6006: "link.exe" wurde mit dem Code 1168 beendet.

    Hier der Code:

    #include <Windows.h>
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int iCmdShow)
    {
    	WNDCLASS wndClass;
    	wndClass.style = CS_HREDRAW | CS_VREDRAW;
    	wndClass.lpfnWndProc = WndProc;
    	wndClass.cbClsExtra = 0;
    	wndClass.cbWndExtra = 0;
    	wndClass.hInstance = hInstance;
    	wndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
    	wndClass.hCursor = LoadCursor(0, IDC_ARROW);
    	wndClass.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
    	wndClass.lpszMenuName = 0;
    	wndClass.lpszClassName = L"d3dApp";
    
    	if (!RegisterClass(&wndClass))
    		return 1;
    	RECT rect = { 0, 0, 800, 600 };
    	AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, 0);
    	int width{ rect.right - rect.left };
    	int height{ rect.bottom - rect.top };
    	HWND hwnd = CreateWindow(L"d3dApp", L"Direct3D Application Frame", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, width, height, 0, 0, hInstance, 0);
    	ShowWindow(hwnd, SW_SHOW);
    	UpdateWindow(hwnd);
    
    	MSG msg{ 0 };
    	while (msg.message != WM_QUIT)
    	{
    		if (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    	MessageBoxExW(NULL, L"Hier könnte Ihre Werbung stehen", L"Test", MB_ICONINFORMATION | MB_OK, NULL);
    	return 0;
    }
    

    Vielleicht weiß jemand was da los ist?

    Mit besten Grüßen,

    Jan

    PS: Normalerweise kenne ich solche Fehler nur wenn die Anwendung im Hintergrund noch läuft 😕



  • @CAres91
    Hallo,

    hast du LNK1168 mal gegoogelt?

    The linker can’t write to filename. The file may be in use and its file handle locked by another process, or you may not have write permission for the file, or for the directory or network share it is located in.


  • Mod

    @CAres91 sagte in error MSB6006: "link.exe" wurde mit dem Code 1168 beendet.:

    PS: Normalerweise kenne ich solche Fehler nur wenn die Anwendung im Hintergrund noch läuft 😕

    Bist du denn absolut, 100% sicher, dass das nicht der Fall ist?

    Falls ja, dann gilt wie immer: Erst einmal googeln! Da findet man zum Beispiel dies hier als ersten Treffer:
    https://stackoverflow.com/questions/12124146/vc-fatal-error-lnk1168-cannot-open-filename-exe-for-writing/17500526



  • Also ich war bis eben relativ sicher, dass die Anwendung nicht im Hintergrund läuft.

    Jetzt sieht es anders aus. Ich habe versucht die exe zu löschen, geht nicht weil sie angeblich noch offen ist. Taskmanager zeigt mir allerdings nicht meine Anwendung.

    Zudem habe ich eben mal als das Fenster noch offen war und im Taskmanager drin war über den Manager beendet anschließend könnte ich das Programm kompilieren nach dem verändern.

    Aber die Frage ist halt wo in meinem Programm steckt der Fehler? 😵


  • Gesperrt

    @CAres91 Ob eine Anwendung ohne Fenster noch aktiv ist, kannst Du auch daran sehen, ob in der Symbolleiste der rote "Debuggen beenden" button noch aktiv ist.

    PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)
    

    Da übergibst Du PeekMessage ein Window-Handle und dadurch verarbeitet PeekMessage nur Messages mit diesem HWND. Es scheint als funktionere WM_QUIT immer nur ohne hwnd. D.h.

    PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)
    

    (Oder vielleicht 0 anstatt nullptr, bin mir jetzt nicht sicher) (edit: nullptr oder NULL scheint doch zu stimmen, da ein HWND ein pointer ist.)



  • Guten Abend,

    gute Neuhigkeiten es lag tatsächlich an dem HWND im PeekMessage😵

    Man muss dazu sagen, ich habe WM_DESTROY durch WM_QUIT ausgetauscht weil ich das auf einer MSDN Seite gelesen habe dass man das so machen soll, deswegen ging die erste Anpassung von PeekMessage nicht, selbiges Problem. Und anstatt jedes mal das OS neuzustarten probiere ich es jetzt immer erst im Debugger aus. 🤓

    Danke für eure Hilfe 🙂



  • @CAres91 sagte in error MSB6006: "link.exe" wurde mit dem Code 1168 beendet.:

    Und anstatt jedes mal das OS neuzustarten probiere ich es jetzt immer erst im Debugger aus.

    TastManager kennst du aber schon, oder?



  • Ja Taskmanager kenne ich nur wenn beim schließen des Fensters die Anwendung nicht mehr im Taskmanager zu finden ist, ist doof^^ Zumindest hab ich sie nirgendwo mehr finden können. Lediglich als das Fenster offen war stand sie im Taskmanager. Hatte ich im vorletzten Post auch erwähnt 😉 Deswegen war das Problem ja auch so lästig, wobei ich mir mit dem Debugger etwas an Frust eingespart hätte 😃



  • Es gibt das auch ein Tab "Prozesse", da auch nicht gefunden?



  • @CAres91

    1. Starte Task-Manager
    2. Falls du in der einfachen Ansicht bist, klicke auf "More details"
    3. Schau dir die beiden Tabs "Processes" und "Details" an
    4. Staune


  • Ich habe es grad mal getestet mit dem Fehler in dem Programm der für das heimliche ausführen im Hintergrund gesorgt hat. Ich habe tatsächlich schon vorher in beide Tabs geschaut aber ich glaube ich war lediglich blind denn unter Details stand die Anwendung tatsächlich drin. Habe ich es mir echt unnötig schwer gemacht 😅 Habe den Rechner bestimmt einige zig Male neu gestartet -.-

    Und ich war kurz davor Windows neuzuinstallieren da ich dachte dass damit was kaputt is😇


Anmelden zum Antworten