小编Ric*_*imo的帖子

如何防止任何C#应用程序的反编译

我们计划使用C#和MySQL开发客户端服务器应用程序.我们计划像任何其他软件实用程序一样在货架上销售产品.我们担心我们的产品反编译在可用性和捆绑功能方面确实比竞争对手有一些优势.

我们如何防止我们的软件反编译,因此产品的业务逻辑仍然完好无损?

我们听说过Reflector和其他反编译器,它们使我们的代码非常容易被复制.

我们的客户群不是公司,而是医生,他们自己可能不会这样做,但我们的竞争对手可能想要复制/禁用许可,甚至复制代码/功能,以便我们的产品价值在市场上下降.

任何阻止这种情况的建议都是受欢迎的.

c# obfuscation licensing decompiling piracy-prevention

26
推荐指数
3
解决办法
4万
查看次数

UnauthorizedAccessException从LOCALAPPDATA中的File.ReadAllBytes"拒绝访问路径"

在读取其中的文件时,同一台机器的同一用户间歇性地发生此异常%LOCALAPPDATA%.

研究

我已经检查了这个标题目前提供的所有可能的重复项(有很多).有一个与读取没有答案的AES加密文件有关; 我不相信,因为这些文件没有加密.

其中大部分与写入文件有关(但我正在读取文件),或者是MSDN上为File.ReadAllBytes(字符串)记录的明显原因.

这个例外的三个解释是:

  1. "当前平台不支持此操作" - 我不知道这意味着什么; 但鉴于这有时适用于同一台机器上的同一用户(我将在下面解释),我想我可以排除这种情况.
  2. " path指定了一个目录" - 正如你从下面的代码中看到的那样,调用是在一个检查中进行的File.Exists,所以我想我可以排除这一点.
  3. "来电者没有所需的许可." 这是这个例外的通常解释,我怀疑我得到了某种"边缘情况".

脚本

当以域用户身份运行的应用程序正在读取%LOCALAPPDATA%同一用户的子文件夹内的文件时,会发生这种情况(对于该用户来说,应该没有权限问题来读取文件).其中的子文件夹只遵循正常的"CompanyName"\"ApplicationName"结构,并且没有对子文件夹应用其他权限(我们只是使用该文件夹来保持我们的文件远离其他人).

例外

System.UnauthorizedAccessException:拒绝访问路径' [redacted] '.在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs) ,System msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost)at System.IO.FileStream..ctor(String path,FileMode mode,FileAccess access,FileShare share,Int32 bufferSize,FileOptions options,String msgPath,Boolean bFromProxy,Boolean useLongPath,布尔checkHost)在System.IO.File.InternalReadAllBytes(字符串路径,布尔checkHost)
下面的代码

        // Note that filename is within %LOCALAPPDATA%
        if (File.Exists(fileName))
        {
            var readAllBytes = …
Run Code Online (Sandbox Code Playgroud)

c# windows unauthorizedaccessexcepti

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

正则表达式:匹配表达式中最近的开始和结束花括号内的所有内容

这有点难以解释我真正想要的东西(更好的标题建议得到赞赏,以便人们可以在将来轻松找到它).

假设我有这个:

{
    {
        $myTagThing$
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要匹配

{
    $myTagThing$
} 
Run Code Online (Sandbox Code Playgroud)

即匹配一切从过去{之前$myTagThing$,直到第一个}之后$myTagThing$.

所以我认为我需要这个\{.*\$myTagThing\$.*\},但它也会匹配字符串中的第一个{和最后一个}(即整个例子).然后我尝试使用前瞻和后视(均为负面)\{(.*(?!\{))\$myTagThing\$.*(?<!\})\}(https://regex101.com/r/RfdHUH/1/).但这仍然行不通.

我的理论是,我可能正在使用前瞻和错误的方式,因为这是我第一次使用它们.

有任何想法吗?

编辑:标志是\gms.

.net c# regex

6
推荐指数
2
解决办法
233
查看次数

更改 .net DateTime 的 Dapper 映射以使用 DbType DateTime2 并再次将其恢复

类似于问题如何让 Dapper 将 .net DateTime 映射到 DateTime2;但我希望事后能够将其重新设置回来。

该问题当前接受的答案涉及更改 Dapper 源文件;但我正在使用 NuGet 包,所以这对我不起作用。正如对已接受答案的第一条评论所指出的,这是不可逆的 - “如果有些是 DateTime 而另一些是 DateTime2 怎么办?” - 这就是我的场景:不同的查询需要不同的映射(每个查询只需要其中之一)。

我正在使用同一问题的得票较高的答案。然而,这种做法似乎也是不可逆转的。似乎第一个查询完成时设置的任何值都会保留,并且此后不可更改。

以下代码是 MCVE。如果运行它,您会看到类型始终显示为“datetime”,并且值的精度永远不会超过毫秒(正如您对日期时间的期望);尽管尝试改变映射。然后,您必须注释掉对“PerformDapperQuery()”的第一次调用,然后再次运行它:您现在将看到该类型始终返回为“datetime2”,并且这些值在秒的小数部分上具有完整的 7 位精度(正如您对 datetime2 的期望)。

public static void Main()
{
    // I know this is marked as obsolete, and I am open to suggestions for alternatives.
    // see https://github.com/StackExchange/Dapper/issues/798
#pragma warning disable 618
    var oldValue = SqlMapper.LookupDbType(typeof(DateTime), null, false, out var handler);
#pragma warning restore 618

    PerformDapperQuery();
    SqlMapper.AddTypeMap(typeof(DateTime), …
Run Code Online (Sandbox Code Playgroud)

c# sql-server datetime datetime2 dapper

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

找到加起来为N的1和2的所有组合

说我有这样的功能.我需要知道将加起来为N的1和2的所有组合.有没有更好的方法来编写这个对于大整数(如N = 1200或12000)表现更好的方法?

public static int Combos(int n)
{
    if (n < 3)
    {
        return n;
    }
    else
    {
        return Combos(n - 1) + Combos(n - 2);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# algorithm

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