小编Cos*_*rvu的帖子

Windows CopyFileA 失败然后成功

尝试将文件复制到具有特定权限的文件夹时遇到问题。

这是我非常简单的测试程序:

#include <iostream>
#include <windows.h>

int main()
{
    if(CopyFileA("D:/SOURCE/File.txt", "D:/LOCKED/dst1.txt", TRUE))
        std::cout << "OK\n";
    else
        std::cout << "Fail\n";

    if (CopyFileA("D:/SOURCE/File.txt", "D:/LOCKED/dst2.txt", TRUE))
        std::cout << "OK\n";
    else
        std::cout << "Fail\n";

    system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

Fail
OK
Run Code Online (Sandbox Code Playgroud)

我可以复制任意数量的文件。对于每次运行,第一次总是失败,后续总是成功。错误是 ERROR_ACCESS_DENIED。

这是重要的细节:我的目标文件夹具有受限的权限,只有当我删除“写入属性”或“写入扩展属性”时才会出现此行为。 在此处输入图片说明

我使用了 sysInternals 的进程监视器:没有其他进程正在访问源文件和目标文件。但是,目标文件上的行为并不相似。第一次尝试关闭文件并尝试重新打开它。以下是日志:

行动 地位 细节
失败的尝试(第一次) —— ——
创建文件 成功 所需访问:通用读/写、删除、写 DAC、处置:创建、选项:顺序访问、非目录文件、属性:A、ShareMode:无、AllocationSize:0、OpenResult:已创建
关闭文件 成功
创建文件 拒绝访问 所需访问:通用读/写、删除、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:无、分配大小:0
创建文件 拒绝访问 所需访问:通用读/写、删除、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:读、写、分配大小:0
创建文件 拒绝访问 所需访问:通用读/写、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:读、写、分配大小:0
创建文件 拒绝访问 所需访问:通用读/写,处置:OpenIf,选项:顺序访问,同步 IO 非警报,非目录文件,属性:A,共享模式:无,分配大小:0
创建文件 拒绝访问 所需访问:通用读/写,处置:OpenIf,选项:顺序访问,同步 IO …

c++ windows file

12
推荐指数
1
解决办法
452
查看次数

MSI错误 - regsvr32自定义操作失败

简要

我有一个安装包(基于MSI),它试图注册一个dll文件,用作Windows资源管理器栏(Internet Explorer工具栏).

自定义操作定义如下:

[SystemFolder]\regsvr32.exe /s "pathtodllhere"
Run Code Online (Sandbox Code Playgroud)

错误

  • 该REGSVR32自定义操作并不能在Windows XP 64位工作.

MSI日志输出:

CustomAction SystemFolder_2返回实际的错误代码5.错误1722.此Windows Installer程序包有问题.作为设置的一部分运行的程序没有按预期完成.操作SystemFolder_2,位置:C:\ Windows\SysWOW64 \,命令:regsvr32.exe/s"C:\ Program Files(x86)\ Test Install\test.dll"

MSI(s)(10:F4):产品:测试安装 - 错误1722.此Windows Installer程序包存在问题.作为设置的一部分运行的程序没有按预期完成.操作SystemFolder_2,位置:C:\ Windows\SysWOW64 \,命令:regsvr32.exe/s"C:\ Program Files(x86)\ Test Install\test.dll"

到目前为止,我的测试/想法的简要说明:

  • 自定义操作位于"InstallFinalize"部分,因此仅在文件被放入硬盘驱动器时运行.
  • DLL文件没有损坏且有效.
  • Regsvr32自定义操作正常(和MSI安装):Windows 7 32位和Windows XP 32位.
  • Regsvr32 32位版本在64位安装期间执行(应该如此).
  • Regsvr32失败,错误代码为5,即ERROR_ACCESS_DENIED.

解决方案和冥想

  1. 自行注册 - 不使用regsvr32并使用我的MSI安装程序手动放置注册表项.
  2. dll是一个Delphi COM dll,它使用TRegistry组件进行自我注册.再一次,我想不出为什么这不起作用的原因,因为它只是一个包装,而只是一个想法.

希望我在这里展示我的研究,不要浪费任何人的时间!

windows delphi installer windows-installer regsvr32

8
推荐指数
1
解决办法
6798
查看次数

在 C++20 之前,使用常量或引用字段在 `A` 上调用 `std::vector&lt;A&gt;::data()`

这是在具有参考字段的类上放置 new的答案的后续。

调用std::vector<A>::data()上型A具有参考常量字段,将指针返回到对象可通过原始向量通过放置新的,这将导致一个的const或参考场来改变原始对象将被替换,而仍然被另一指针管理,通过调用返回data()

例如:

struct A {
    const int i = 0;
};

int main() {
    std::vector<A> vec = {{1}, {2}};
    auto ptr = vec.data();
    std::cout << ptr[1].i << std::endl; // 2
    vec.pop_back();
    vec.push_back({3}); // placement new, inside
    std::cout << ptr[1].i << std::endl; // 3
}
Run Code Online (Sandbox Code Playgroud)

C++17 试图通过引入来解决这些问题,std::launder但后来同意虽然std::launder可以解决其他问题,但它并没有真正解决上述用例的问题,如NB US042 中所述

一些问题 - 对于C++20 之前的C++ 版本:

  • 由于NB US042 …

c++ placement-new language-lawyer c++20

7
推荐指数
1
解决办法
320
查看次数

模拟Windows Installer

是否可以模拟Windows Installer?我想在安装过程中为各种场景设置测试.我并不关心Windows Installer数据库中存储的内容,我只想测试安装程序包的输出(更改了哪些文件等).

编辑

我想我可以设置VMWare图像并编写脚本.有人知道如何在VMWare实例中编写脚本/自动化任务吗?

testing scripting vmware automation windows-installer

6
推荐指数
1
解决办法
313
查看次数

windows 4.5 bootstrapper包在哪里?

刚刚获得了我正在尝试运行的安装项目的源文件,我收到此警告:

警告:在路径'c:\ Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper \'中找不到先决条件'Windows Installer 4.5'

我检查,当然没有4.5安装程序的文件夹,如警告中所述.我谷歌并发现我无法单独下载它,但据称它包含在Visual Studio发行版中.

嗯......我正在运行VS 2008而且它不在那里.我还查看了我最近安装VS 2008 express的另一台计算机,它也不存在.

谁知道我能在哪里得到它?

.net installation

6
推荐指数
1
解决办法
3818
查看次数

Firebase Ml-kit 人脸检测端口到 C++ 可能吗?

我想将 Firebase ml-kit 的 Java/Kotlin 实现移植到 C++,以便在 PC 上进行测试。我想它一定是一些 TensorFlow Lite 模型,我应该能够从官方的 TensorFlow 源代码中调整来使用它。

但是人脸检测模型在哪里?这三个模型@ https://github.com/firebase/quickstart-android/tree/master/mlkit/app/src/main/assets 似乎是分类模型。

以及如何解析结果以获得面部轮廓和面部标志点?

我现在检查了几天,但在 C++ 中没有看到类似的东西。

c++ api tensorflow tensorflow-lite firebase-mlkit

6
推荐指数
0
解决办法
362
查看次数

错误1001.指定的服务已存在

我正在编写一个C#windows服务,我能够在Visual Studio中安装和卸载,然后不确定我在代码中做了什么,搞砸了.现在当我尝试安装时,我收到错误1001:

The specified service already exists.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试卸载时,它给了我:

Another program is being installed. Please wait until that installation is complete, and then try installing this software again.  
Run Code Online (Sandbox Code Playgroud)

我确实看到我的服务仍列在服务中.我该怎么做才能解决这个问题?

service installer windows-services

3
推荐指数
1
解决办法
5983
查看次数

如何从ExecDos :: exec获取输出

当我netstat -a |find /C $portNumber在命令提示符下执行时,我得到给定端口号存在的总行数.

我想在任何变量中获得相同的计数,以便我可以检查NSIS中的端口是否已被占用或空闲.

我正在排除下面的命令,我尝试了很多方面,但是我无法在变量或堆栈中获得ExecDos :: exec的输出.

ExecDos::exec "netstat -a |find /C '$portNumber'| $output"
Run Code Online (Sandbox Code Playgroud)

installer netstat nsis

3
推荐指数
1
解决办法
3874
查看次数

使用WiX在单个MSI中注册32位和64位DLL

我需要创建一个单一的Windows安装程序,当它在目标m/c上运行时执行以下任务:

  • 运行服务
  • 注册一个32位DLL
  • C:\Windows\sysWoW64文件夹和存储中存储32位和64位log4cxx.dll库C:\Windows\system32
  • 注册64位DLL

目前,我正在使用WiX创建一个安装程序,我现在可以注册32位或64位安装程序但不能同时注册.不幸的是,我没有选择分离32位和64位安装程序,因为我需要在64位计算机上注册这两个安装程序.

我想知道是否有办法在一个安装程序中注册这两个DLL.提前致谢.

windows dll 64-bit 32-bit wix

2
推荐指数
1
解决办法
1344
查看次数

使用 OpenCV 实现反锐化掩码

我想像 Adob​​e Photoshop 一样应用不清晰的蒙版,我知道这个答案,但它不如 Photoshop 清晰。

Photoshop 在 Smart Sharpen 对话框中有 3 个参数:Amount、Radius、Reduce Noise;我想实现所有这些。 在此处输入图片说明

根据 SO 中的各种来源,这是我编写的代码。但是在某些阶段(“blurred”、“unsharpMask”、“highContrast”)结果很好,但在最后阶段(“retval”)结果不好。

我哪里错了,我应该改进什么?

是否可以在性能方面改进以下算法?

#include "opencv2/opencv.hpp"
#include "fstream"
#include "iostream"
#include <chrono>

using namespace std;
using namespace cv;

// from https://docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html
void increaseContrast(Mat img, Mat* dst, int amountPercent)
{
    *dst = img.clone();
    double alpha = amountPercent / 100.0;
    *dst *= alpha;
}

// from /sf/answers/41737041/
float luminanceAsPercent(Vec3b color)
{
    return (0.2126 * color[2]) + (0.7152 * color[1]) + (0.0722 * color[0]);
}

// …
Run Code Online (Sandbox Code Playgroud)

c++ photoshop opencv image-processing

1
推荐指数
1
解决办法
197
查看次数

在WIX中执行DOS命令

我想从WIX执行DOS命令.命令如下:

[SystemFolder]cmd.exe /c rmdir /s /q [INSTALLDIR]
Run Code Online (Sandbox Code Playgroud)

基本上我想在卸载期间从命令提示符下删除安装目录.

我想使用SystemFolder属性指定cmd.exe路径.最重要的是,我不希望在卸载期间出现命令窗口.

wix

0
推荐指数
1
解决办法
937
查看次数