Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

以管理员权限运行时无法使用文件拖拽功能 #2531

Closed
2 tasks done
George-Lvqr opened this issue Aug 19, 2023 · 34 comments
Closed
2 tasks done

以管理员权限运行时无法使用文件拖拽功能 #2531

George-Lvqr opened this issue Aug 19, 2023 · 34 comments
Labels
· Bug 需要社区帮助 开发者无法处理,需要社区提供帮助

Comments

@George-Lvqr
Copy link

检查项

  • 我已点击 设置 → 启动器 → 检查更新 确认了启动器已为最新版,且最新版未修复这个 Bug。怎样更新?
  • 我已在 Issues 页面 中搜索,确认了这一 Bug 未被提交过。

描述

在对模组版本进行安装模组时,发现拖拽功能不可用,将mod.jar文件拖入PCL窗口时,会显示禁止图标,无法通过拖拽方法进行安装模组,即使是在mod管理页面也是如此.

重现步骤

1、在PCL窗口或模组版本的mod管理页面
2、向窗口内拖拽mod,无法安装.

日志与附件

Log1.txt
Log2.txt
Log3.txt
Log4.txt
Log5.txt

@George-Lvqr George-Lvqr added · Bug 新反馈 需要社区初步确认其有效的新 Issue labels Aug 19, 2023
@SALTWOOD
Copy link
Contributor

无法稳定复现,似乎是概率问题

@zkitefly
Copy link
Collaborator

zkitefly commented Aug 19, 2023

你是不是将 PCL 给予了管理员权限?


#2519 (comment)

如果拽进启动器时光标显示为禁止符号,请 不要 使用管理员权限启动 PCL,并打开系统 UAC。

@zkitefly zkitefly added 等待反馈者 需要反馈者补充信息或配合测试 and removed 新反馈 需要社区初步确认其有效的新 Issue labels Aug 19, 2023
@George-Lvqr
Copy link
Author

George-Lvqr commented Aug 19, 2023 via email

@zkitefly
Copy link
Collaborator

zkitefly commented Aug 19, 2023

应该是我给予了PCL管理员权限,我用非管理员启动以后功能正常. 从 Windows 版邮件发送 发件人: SALTWOOD 发送时间: 2023年8月19日 12:19 收件人: Hex-Dragon/PCL2 抄送: 吕启睿; Author 主题: Re: [Hex-Dragon/PCL2] 关于拖拽安装模组功能 (Issue #2531) 无法稳定复现,似乎是概率问题 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

那这就不是 PCL 的问题了吧:thinking:

@zkitefly zkitefly added 等待确认 已经过社区确认,等待开发者确认 and removed 等待反馈者 需要反馈者补充信息或配合测试 labels Aug 19, 2023
@LTCatt
Copy link
Member

LTCatt commented Aug 19, 2023

我看看有没有办法修

@LTCatt LTCatt added 处理中 开发者正在调查或处理该 Issue and removed 等待确认 已经过社区确认,等待开发者确认 labels Aug 19, 2023
@George-Lvqr George-Lvqr changed the title 关于拖拽安装模组功能 PCL管理员运行时无法使用拖拽安装mod.整合包 Aug 21, 2023
@Yue-cn
Copy link

Yue-cn commented Aug 22, 2023

Windows 的 安 全 机 制,其他软件也会这样哦,无论是WinForm还是 WPF,除非做了逻辑优化。
image

@MCSteve123
Copy link

Windows 的 安 全 机 制,其他软件也会这样哦,无论是WinForm还是 WPF,除非做了逻辑优化。 image

很难李姐这是为啥,防止用户拖个病毒进去?要知道管理员权限可以运行几乎所有应用……

@Yue-cn
Copy link

Yue-cn commented Aug 27, 2023

用户输入不可信

连鼠标模拟操作都能做到,你也不知道能拖进去个啥,都能 Inject 了

@ZmdNotFound
Copy link

难怪...我的PCL因为要用内存优化就默认管理员了

@LTCatt LTCatt closed this as completed Sep 8, 2023
@HexDragon-Bot HexDragon-Bot added 完成 该 Issue 已被处理,将在下次更新中实装 and removed 处理中 开发者正在调查或处理该 Issue labels Sep 8, 2023
@George-Lvqr
Copy link
Author

lssue

@George-Lvqr
Copy link
Author

lssue E24B-54F9-35F9-65BA

@LTCatt
Copy link
Member

LTCatt commented Sep 9, 2023

你的解锁码:IxTKIBZzDz6AGrZFdtT5jAURZ7tO3jtT
在 更多 → 关于与鸣谢 → 输入解锁码 中使用,谢谢支持~

@WForst-Breeze
Copy link
Collaborator

WForst-Breeze commented Nov 14, 2023

LTCatt/PCL2Help#336

image

@JingHai-Lingyun
Copy link
Collaborator

JingHai-Lingyun commented Nov 14, 2023

reopen 吧
我这边 Snapshot 版 2.6.10(0) 管理员起也拖动不了

@WForst-Breeze WForst-Breeze reopened this Nov 14, 2023
@WForst-Breeze WForst-Breeze removed the 完成 该 Issue 已被处理,将在下次更新中实装 label Nov 14, 2023
@LTCatt LTCatt closed this as not planned Won't fix, can't repro, duplicate, stale Nov 22, 2023
@LTCatt LTCatt added 拒绝 / 放弃 不会制作该功能或无法修复该 Bug 需要社区帮助 开发者无法处理,需要社区提供帮助 重要 and removed 处理中 开发者正在调查或处理该 Issue labels Nov 22, 2023
@LTCatt LTCatt changed the title PCL管理员运行时无法使用拖拽安装mod.整合包 以管理员权限运行时无法使用文件拖拽功能 Nov 22, 2023
@allMagicNB
Copy link
Collaborator

allMagicNB commented Jan 1, 2024

@LTCatt

尽可能尝试修复相关代码,依然无法解决……如果谁有解决方案可以提出 相关代码: image 相关讨论,但似乎没有其他可行的解决方案: https://learn.microsoft.com/zh-cn/archive/blogs/patricka/q-why-doesnt-drag-and-drop-work-when-my-application-is-running-elevated-a-mandatory-integrity-control-and-uipi https://stackoverflow.com/questions/56230602/bypass-uac-to-allow-drag-drop-from-an-unelevated-source-onto-our-elevated-appl?noredirect=1&lq=1 https://stackoverflow.com/questions/2833709/c-sharp-drag-drop-does-not-work-on-windows-7

我在某个易语言模块找到了管理员权限也可使用的拖放方案,要转语言……但基本就是调用API
要不……龙猫你先看看行不行,行的话我再给你提取出来?

展开
.版本 2

.程序集 文件拖放, , 公开, 文件拖放
.程序集变量 hWndControl, 整数型
.程序集变量 WndProc, 整数型
.程序集变量 oldWndProc, 整数型
.程序集变量 lpPrevWndFunc, 整数型
.程序集变量 iswchar, 逻辑型

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用



.子程序 _销毁

拖放对象_撤销 ()

.子程序 拖放对象_注册, , 公开, 将类命令声明到程序集,局部变量会失败
.参数 窗口句柄, 整数型
.参数 挂接拖放事件, 子程序指针, , 创建一个取回文件名子程序.需要带参数;   参数1:文本型
.参数 使用Unicode字符集, 逻辑型, 可空, 为真时挂接拖放事件接收宽字符

hWndControl = 窗口句柄
lpPrevWndFunc = 到整数 (挂接拖放事件)
iswchar = 使用Unicode字符集
.如果真 (_WIN32_WINNT ≥ #_WIN32_WINNT_VISTA)
    ChangeWindowMessageFilter (#WM_DROPFILES, #MSGFLT_ADD)
    ChangeWindowMessageFilter (#WM_COPYDATA, #MSGFLT_ADD)
    ChangeWindowMessageFilter (#WM_COPYGLOBALDATA, #MSGFLT_ADD)
.如果真结束
DragAcceptFiles (hWndControl, 1)
WndProc = 类_取内部方法地址 (5)  ' 拖放对象回调
oldWndProc = SetWindowLongW (hWndControl, #GWL_WNDPROC, WndProc)

.子程序 拖放对象_撤销, , 公开

DragAcceptFiles (hWndControl, 0)
.如果真 (oldWndProc ≠ #NULL)
    SetWindowLongW (hWndControl, #GWL_WNDPROC, oldWndProc)
    oldWndProc = #NULL
.如果真结束
.如果真 (WndProc ≠ #NULL)
    类_释放内部方法地址 (WndProc)
    WndProc = #NULL
.如果真结束
lpPrevWndFunc = #NULL
iswchar = 假

.子程序 拖放对象回调, 整数型
.参数 hWnd, 整数型
.参数 uMsg, 整数型
.参数 hDrop, 整数型
.参数 lParam, 整数型
.局部变量 pwzFilePath, 整数型
.局部变量 szFilePath, 文本型
.局部变量 nNumOfFiles, 整数型
.局部变量 i, 整数型

.如果真 (uMsg = #WM_DROPFILES)
    nNumOfFiles = DragQueryFileW (hDrop, -1, #NULL, 0)
    .如果真 (nNumOfFiles > 0)
        pwzFilePath = LocalAlloc (#LMEM_ZEROINIT, 1025 × 2)
        .如果真 (pwzFilePath ≠ #NULL)
            .变量循环首 (0, nNumOfFiles - 1, 1, i)
                memset (pwzFilePath, 0, 1025 × 2)
                .如果 (iswchar)  ' 使用Unicode字符集
                    DragQueryFileW (hDrop, i, pwzFilePath, 1024)
                .否则
                    DragQueryFileA (hDrop, i, pwzFilePath, 1024)
                .如果结束
                调用子程序_ (lpPrevWndFunc, pwzFilePath, , , , , , , , , , , , , , )
            .变量循环尾 ()
            LocalFree (pwzFilePath)
        .如果真结束

    .如果真结束
    DragFinish (hDrop)
    返回 (0)
.如果真结束
返回 (CallWindowProcW (oldWndProc, hWnd, uMsg, hDrop, lParam))

@LTCatt
Copy link
Member

LTCatt commented Jan 1, 2024

试着换成了它的 ChangeWindowMessageFilter,还是没卵用……

@allMagicNB
Copy link
Collaborator

试着换成了它的 ChangeWindowMessageFilter,还是没卵用……

@LTCatt 应该是可以用的,但是有些是常量,等我再替换提取下发上来……
你可以安装个易语言5.8(编译需要加密狗,写代码不用的),等会我会直接发易语言源码(.e)文件

@JingHai-Lingyun

This comment was marked as off-topic.

@allMagicNB
Copy link
Collaborator

呃 你或许得考虑发代码的时候用代码块...

额,这代码不是完整的。。。

@allMagicNB
Copy link
Collaborator

试着换成了它的 ChangeWindowMessageFilter,还是没卵用……

@LTCatt 提出来了,
wjtf.zip
其中文件拖放.e是模块源码
文件拖放.ec是源码编译后的模块
TuoFangTest.e是测试源码
TuoFangTest.exe是源码编译出来的测试程序
剩下一个录屏是使用演示

@LTCatt
Copy link
Member

LTCatt commented Jan 6, 2024

看了看,这应该还涉及了 WPF 底层的问题,PCL 的拖拽实现是 WPF 原生的,没有使用 DragAcceptFiles,有可能是 WPF 的原生实现有问题?
如果谁有 WPF 框架下的成功解决方案可以发一下,多谢 Orz

@allMagicNB
Copy link
Collaborator

allMagicNB commented Jan 6, 2024

看了看,这应该还涉及了 WPF 底层的问题,PCL 的拖拽实现是 WPF 原生的,没有使用 DragAcceptFiles,有可能是 WPF 的原生实现有问题?
如果谁有 WPF 框架下的成功解决方案可以发一下,多谢 Orz

@LTCatt 你这段话让我想起来管理员运行的Terminal也不能拖拽文件添加文件路径。原本没有管理员权限是可以的……可见甚至连微软官方都没有注重😂
所以这个问题的最优解也许就是把UAC弹窗关了?
我发的那个里面TuoFangTest.exe,就是管理员还支持拖放的例子。如果真是要采用重写整个拖放,工程量会很大,而且还会有个转编程语言操作
易语言使用自带的拖拽组件也会造成使用管理员运行时无法拖入,应该是所有的拖拽都是调用的系统的年老的API,拖拽这玩意几乎没啥人用,也没人来反馈……
所以可能不是框架的问题,而是系统提供的API本身就有问题
换个角度想,用户关个UAC就得了,哪里还需要作者这么麻烦?

@allMagicNB
Copy link
Collaborator

allMagicNB commented Jan 6, 2024

@LTCatt 看了看是Win系统普遍的问题,原生拖放支持调用的是explorer.exe,explorer.exe本身就默认没有管理员权限。
使用管理员身份运行后又因为explorer.exe权限和它不同(普通用户权限≠管理员用户权限),explorer.exe无权对它操作
要想要以管理员身份运行时支持拖放的话……尝试把explorer.exe进程杀掉然后以管理员身份运行,这时两者权限相同,就可以支持拖放了
参考:https://zhuanlan.zhihu.com/p/343369663

@JingHai-Lingyun
Copy link
Collaborator

杀 explorer.exe 可能导致其他的问题...

@allMagicNB
Copy link
Collaborator

杀 explorer.exe 可能导致其他的问题...

我说的是杀了再重新以管理员身份运行。可能会导致文件资源管理器被关?

@wuliaodexiaoluo
Copy link
Contributor

杀 explorer.exe 可能导致其他的问题...

我说的是杀了再重新以管理员身份运行。可能会导致文件资源管理器被关?

如果重启失败 100% 影响用户使用
Microsoft 总会整点花活给我们看

@allMagicNB
Copy link
Collaborator

@wuliaodexiaoluo 你别再找存在感去 Comment 坟贴了……更何况内容还没啥用

@allMagicNB
Copy link
Collaborator

所以说,没法重写拖放吗(

@LTCatt
Copy link
Member

LTCatt commented May 12, 2024

我不确定能不能重写 WPF 的拖放框架,但那样真的太折磨人了……最近的时间安排上确实比较着急 orz

@Yue-cn
Copy link

Yue-cn commented May 12, 2024

记得WebView是怎么实现的吗?Hwnd覆盖在上方了哦,但是覆盖窗口的行为不可取(子窗口除外)

亦或者,也可以试试 IPC (但感觉有点小题大作了)

@allMagicNB
Copy link
Collaborator

记得WebView是怎么实现的吗?Hwnd覆盖在上方了哦,但是覆盖窗口的行为不可取(子窗口除外)

亦或者,也可以试试 IPC (但感觉有点小题大作了)

我记得有个 API 是 DragAcceptFiles,好像调用之后可以用某个方法取拖放进来的玩意(

@LTCatt LTCatt removed the 拒绝 / 放弃 不会制作该功能或无法修复该 Bug label May 13, 2024
@Yue-cn
Copy link

Yue-cn commented Jun 9, 2024

2024-06-09

SetWindowLongPtr() with

WS_EX_ACCEPTFILES 扩展窗口样式,不过可能要重写WndProc了 (WPF相对来说,是Hook)

https://learn.microsoft.com/zh-cn/windows/win32/winmsg/extended-window-styles

@LTCatt
Copy link
Member

LTCatt commented Jun 9, 2024

被这玩意儿恶心吐了已经,不想折腾了,除非有 PR(趴

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
· Bug 需要社区帮助 开发者无法处理,需要社区提供帮助
Projects
None yet
Development

No branches or pull requests