“无法打开输出文件名.exe:权限被拒绝”(“cannot open output file fil

2019-10-20 04:42发布

我刚学C ++,我试图让使用windows.h头的程序。 我现在用的开发 - C ++编译器和我收到三个错误,我无法找到一个解决方案。

这些都是错误的:

无法打开输出文件名.exe:权限被拒绝
[错误] LD返回1退出的目标状态配方“文件名.exe”失败

这里是我的代码:

#include &#60windows.h&$62
#include &#60iostream&#62
#include &#60fstream&#62
#include &#60string&#62
#include &#60vector&#62
using namespace std;

HWND textfield;
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
    case WM_CREATE:

            CreateWindow("STATIC",
            "DocJoin Document Combiner",
            WS_VISIBLE | WS_CHILD | WS_BORDER,
            20,20,300,25,
            hwnd,NULL,NULL,NULL);
            break;

    /* Upon destruction, tell the main thread to stop */
    case WM_DESTROY: {
        PostQuitMessage(0);
        break;
    }

    /* All other messages (a lot of them) are processed using default procedures */
    default:
        return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int     nCmdShow) {
WNDCLASSEX wc; /* A properties struct of our window */
HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
MSG Msg; /* A temporary location for all messages */

/* zero out the struct and set the stuff we want to modify */
memset(&wc,0,sizeof(wc));
wc.cbSize        = sizeof(WNDCLASSEX);
wc.lpfnWndProc   = WndProc; /* This is where we will send messages to */
wc.hInstance     = hInstance;
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);

/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

if(!RegisterClassEx(&wc)) {
    MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
    return 0;
}

hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","DocJoin",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, /* x */
    CW_USEDEFAULT, /* y */
    683, /* width */
    730, /* height */
    NULL,NULL,hInstance,NULL);

if(hwnd == NULL) {
    MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
    return 0;
}

/*
    This is the heart of our program where all input is processed and 
    sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
    this loop will not produce unreasonably high CPU usage
*/
while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
    TranslateMessage(&Msg); /* Translate key codes to chars if present */
    DispatchMessage(&Msg); /* Send it to WndProc */
}
return Msg.wParam;

}

这里是Makefile.win:

# Project: ProjectName

# Makefile created by Dev-C++ 5.6.3

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = main.o
LINKOBJ  = main.o
LIBS     = -L"[...]" -L"[...]" -static-libgcc -mwindows -g3
INCS     = -I"[...]" -I"[...]" -I"[...]"
CXXINCS  = -I"[..]" -I"[...]" -I"[...]" -I"[...]"
BIN      = filename.exe
CXXFLAGS = $(CXXINCS) -g3
CFLAGS   = $(INCS) -g3
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

我花了3个小做研究和故障排除,我只是难倒。 这是我第一次使用C ++编译器,这意味着它的我的第一个程序。

Answer 1:

你必须改变文件的位置。

注意 :不要保存在文件Program FilesProgram Files (x86)在Microsoft Windows。

您可以使用例如另一个路径C:\USER\.....



Answer 2:

链接器无法删除现有文件filename.exe

  1. 确认“文件名”过程目前不捉迷藏。
  2. 检查它的权限
  3. 尝试手动删除/重命名它

至于编译器而言,有在源代码中没有错误。

如果我可以,你应该用简单的应用开始,如果这是你的第一个程序(特别是避免GUI和去控制台应用程序)



Answer 3:

我有同样的问题了几个月。 我试着列出的所有解决方案,但没有成功。 今天,我发现我的工作一个解决方案,我想分享。

1 - 卸载开发 - C ++。

2 - 运行regedit,找到 “奥威尔”, “DEVCPP”, “开发 - ++”, “流血”,删除所有记录。

3 - 运行明智的注册表清理,扫描,清理,碎片整理注册表(该步骤可以被overkilling)

4 - 删除程序文件夹 “C:\ Program Files文件(x86)的\开发-CPP” 或什么的。

5 - 从奥威尔下载开发-C ++的最后一个版本。

6 - 正常安装,默认选项所有的时间。

该诀窍。 我很高兴。



文章来源: “cannot open output file filename.exe: Permission denied”