【问题标题】:Windows 7 How to write to "Programs Folder\app directory" using visual studioWindows 7 如何使用 Visual Studio 写入“Programs Folder\app 目录”
【发布时间】:2010-07-07 10:49:32
【问题描述】:

我已经开发了软件,并试图通过在第一次运行应用程序时将所有机器 MAC 地址写入程序根应用程序文件夹中的文本文件来防止它从一台机器复制到另一台机器。此后每次运行应用程序时,它都会检查文本文件是否存在,并将文本文件中的数据与正在运行的计算机上的 mac 地址进行比较。如果它们不同,则程序无法运行。

如果有人试图只复制目录,他们也会复制文本文件,当他们试图在另一台计算机上运行应用程序时,它会失败。

向虚拟存储写入内容不是问题,但程序可以被复制并在未经授权的机器上运行。

我需要一次写一个文本文件。

谢谢,迈尔斯

【问题讨论】:

  • 这是个坏主意。它不仅是一个非常无效的复制保护系统,而且在启用了 UAC 的系统上也不起作用,因为应用程序无法写入 Program Files 目录。我会试着想出别的办法。
  • 如果有人复制除了文本文件之外的所有内容......然后呢?
  • 所以如果我的网卡坏了你的应用程序就不再适合我了?或者如果我拔下我的 USB 无线适配器?对不起,但这是检查软件复制的糟糕方法。如果您使用 Windows 安装的序列号或其他东西,这可能是合理的,但使用来自可以轻松更改的硬件的信息是一个非常糟糕的主意。

标签: visual-studio security windows-7


【解决方案1】:

启用 UAC 后,未经用户许可,您不能这样做。而是将数据文件写入用户的应用数据文件夹...

【讨论】:

  • 我发现的是;大多数人,不是所有人,都会复制整个应用程序目录,因为他们不知道他们是否需要 txt 文件。我很难弄清楚是什么导致应用程序无法运行。 txt 文件当前写入强制 UAC 的虚拟商店用户应用程序数据。我不想禁用 UAC。我需要一次性编写 Vista/W7 系统。
  • 它不写 MAC 即插即用: Imports System.Net.NetworkInformation Public Class mac_address_getter Private netcardname, mac_id As String Private networkcard() As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces() Private Iobj As NetworkInterface Public Function MAC_getter() As String For Each Iobj In networkcard netcardname = Iobj.Description mac_id = mac_id & netcardname & " " & Iobj.Id.ToString & vbNewLine Next Return mac_id End Function End Class
【解决方案2】:

你只有一次机会,这就是你所需要的。您的应用程序的 setup.exe 程序将以管理员权限运行。编写自定义操作来创建该文件。

我将避免通过默默无闻来谈论安全的优点。或者当一个重要的客户由于硬件升级而突然不能再使用关键任务软件时,您会遇到巨大的麻烦。

【讨论】:

  • 一般来说,当你生活在一个 UAC 世界中时,把你曾经在“第一次运行”时做的所有事情,并在安装时做它们。安装是提升的,第一次运行不是。像汉斯一样,我不会对你的整体计划的优点发表评论。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多