我想将我的应用程序设置为在 Windows 中具有文件关联(额外的复杂性:文件扩展名可能与其他一些不相关的应用程序冲突)。处理这种情况的最佳方法是什么?用户很可能不会同时拥有这两者,但如果两者兼得,最好的处理方法是什么?
我一直在网上搜索 stackoverflow 和其他各种网站,并且对如何做到这一点有一个基本的想法(我已经尝试过,并且它有效),但找不到关于如何最好地完成此操作的明确参考。
一些参考文献说将条目放入注册表中的 HKEY_CLASSES_ROOT 中。有人说不要这样做,而是将其放入 HKEY_LOCAL_MACHINE\Software\Classes 中。
应用程序是否还需要在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths 或 HKEY_CLASSES_ROOT\Applications 下注册(参考上面关于 HKEY_CLASSES_ROOT 与 HKEY_LOCAL_MACHINE\Software\Classes 的讨论,这在技术上是否是正确的位置)?
我还看到一些页面建议设置“CurVer”和“OpenWithProgids”,但我不确定它们有何帮助。
我发现我可以创建
HKEY_LOCAL_MACHINE\Software\Classes.aaa(默认)AAAapp
HKEY_LOCAL_MACHINE\Software\Classes\AAAapp(默认) AAAapp DefaultIcon "%mypath%\to\AAAappIcon.ico" shell\open\command "%mypath%\to\AAAapp.exe" "%1"
它有效。我没有创建应用程序路径或应用程序注册表项,因此这些项似乎不会影响此问题。此外,上面似乎没有提供很好地处理系统上已存在“.aaa”文件扩展名关联的情况。
任何指导表示赞赏!
我正在尝试创建一个可以更改注册表值的应用程序.我可以很好地更改注册表值,但问题是需要重新启动才能使其生效.我想这样做而不重启.
我想要更改操作系统注册表值像壁纸和其他人.
我可以在wix的setup项目中编写一个注册表项和值,代码如下:
<RegistryKey Id="WinApp" Root="HKLM" Key="Software\App\[ProductName]" Action="createAndRemoveOnUninstall" >
<RegistryValue Type="string" Name="InstallName" Value="[ProductName]" Action="write" KeyPath="yes"></RegistryValue>
</RegistryKey>
Run Code Online (Sandbox Code Playgroud)
我怎么能在bootstrapper项目中做?
我试图删除使用Delphi的Windows密钥,但不成功,遵循我正在使用的代码
Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
Var
iRet: Integer;
Begin
If IsReg64 Then
iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_64KEY, 0)
Else
iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_32KEY, 0);
If iRet = ERROR_SUCCESS Then
Result := True
Else
Result := False;
End;
Run Code Online (Sandbox Code Playgroud)
在某些键中,我可以删除多个自己的Regedit我的访问被拒绝错误
我该如何解决这个问题?
编辑-----------------------
我尝试按如下方式做,但没有成功
function SHDeleteKey(key: HKEY; pszSubKey: LPCTSTR): DWORD; stdcall;
implementation
{$R *.dfm}
function SHDeleteKey; external 'shlwapi.dll' name 'SHDeleteKeyA';
procedure TForm1.FormCreate(Sender: TObject);
begin
SHDeleteKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\AdobeCS6ServiceManager');
end;
Run Code Online (Sandbox Code Playgroud)
Powershell 命令显示 false ,即使该路径存在于注册表中,我做错了什么?
PS D:\Folder> Test-Path -Path 'HKU:\S-9-9-21-57989841-616249376-1801674531-2451702'
False
Run Code Online (Sandbox Code Playgroud)
我正在开发在 64 位 Windows 11 上运行的 Delphi 12 应用程序。我的应用程序需要从注册表中读取路径(用户路径和系统路径),并且我的应用程序可以读取用户路径,但不能读取系统路径。
我使用“工具”->“选项”->“清单”要求管理员权限才能执行该程序,当我运行该应用程序时,它会提示我授权管理员模式,所以我知道它的一部分正在工作。
我已经在互联网上搜索了好几天寻找解决方案,并且尝试了我能找到的所有选项(Embarcadero 的网站本周关闭,这使得所有这一切变得更加困难,因为我在那里找到了许多文章参考文档)并且每次,代码成功打开指定的键 ( SYSTEM\CurrentControlSet\Control\Session Manager\Environment),但无法读取其中的任何属性(如path属性)。
我什至尝试TStringList使用该键下的所有属性填充 a
我创建了一个示例应用程序来演示这一点,您可以在https://github.com/johnwargo/Path-Test-2024找到它。
procedure PopulateList(pathList: TListBox; source: String; rootKey: HKEY;
regKey, regProperty: String);
var
Reg: TRegistry;
pathArray: Tarray<String>;
msg, pathStr: String;
begin
LogMessage(Format('Reading "%s" Path from "%s"', [source, regKey]));
// Reg := TRegistry.Create(KEY_ALL_ACCESS);
// Reg := TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY);
// Reg := TRegistry.Create(KEY_EXECUTE);
// Reg := TRegistry.Create(KEY_EXECUTE OR KEY_WOW64_64KEY);
// Reg := TRegistry.Create(KEY_READ OR KEY_WOW64_32KEY);
Reg := TRegistry.Create(KEY_READ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该类TRegistry读取 Windows 中的注册表值。
有人给我发送了一个如何使用它的示例,但代码不起作用。
uses Windows, Registry;
...
procedure TForm1.Button1Click(Sender: TObject);
var
Registry: TRegistry;
ProductName: string;
begin
Registry := TRegistry.Create(KEY_READ); // or KEY_WRITE if you want to modify the value
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
ProductName := Registry.GetValue('SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName', '');
ShowMessage('The product name is: ' + ProductName);
finally
Registry.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这不是找GetValue。所以也许这不是TRegistry工作方式,或者它的工作方式在新版本的 Delphi 中已经改变了。我不确定,而且 Embarcadero docwiki 已关闭,所以我也无法在那里检查。
怎样TRegistry运作?如何使用它从注册表中读取值?
我使用regedit创建了一个密钥,现在我希望得到它的价值.它没有给出任何错误,但它没有显示任何内容.代码:
int main() {
HKEY hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Ehsan Akbari", 0, KEY_ALL_ACCESS, &hKey);
TCHAR sz[50];
DWORD size = 50,type;
RegEnumValue(hKey, 0, L"test", &size, NULL, &type, (LPBYTE)sz, &size);
RegCloseKey(hKey);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注册图片:图片
我究竟做错了什么?
编辑
当我调试我看到hKey的NULL,但GetLastError不报什么.
我想创建并保存我创建的文件,以便没有人可以访问它.我已经知道如何创建文件,所以我的问题是:如何在注册表中保存此文件,以便没有人可以修改或删除它?
这是创建文件:
File f = new File("C:\\test.txt");
f.mkdirs();
f.createNewFile();
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,这是我在注册表中保存文件的结果 http://answers.yahoo.com/question/index?qid=20090310201348AAihqUQ