簡體   English   中英

我可以列出沒有注冊表項的應用程序嗎?

[英]Can I list apps that don't have registry entries?

我一直在嘗試一種方法,可以快速輕松地列出機器上安裝的所有軟件。 完成后,我想將其發送給我的小組,以便讓所有人運行它。 由於此練習的目的是生成我們絕對需要與IT管理員聯系的所有應用程序的列表,因此我不想錯過任何重要的信息。

到目前為止,我使用的代碼與非常相似-它會在注冊表中的SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\和Software \\ Wow6432Node \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\中查找,並提供給我所有已安裝的軟件。 但是,明顯缺少大量重要程序(例如R,RStudio,SQL Developer),我認為這是因為它們不使用Windows Installer。

這使我想到了一個問題-有沒有辦法列出我的計算機上可以運行的所有程序(未影響注冊表)? 本質上,我想我想要所有非系統* .exe文件,但這可能會使事情簡化了。

有人有想法么? 我的代碼現在是VBS,但是我可以通過大多數事情來弄清楚自己的方式。

如果要查找所有文件,則需要搜索計算機上的每個文件,並檢查其是否具有可執行擴展名。 我有足夠的信心相信您不會想要這樣做。

我讀了您的答案並笑了,因為我也“有信心地”確信我不想遍歷我(或其他任何人)計算機上的所有文件。 一旦笑聲停止,我意識到那基本上就是我要做的...

我想出了一些可行的方法,現在需要幾分鍾才能運行(僅需幾秒鍾即可檢查注冊表),但它確實可以工作。 我將其放在此處,以防它可以幫助其他人,或者有人可以找到提高效率的方法。 您需要提供指向要在其中查找exe文件的文件夾以及要輸出到的文件的路徑。

謝謝閱讀。

On Error Resume Next
Folders = Array("C:\users\me","C:\SoftwareFolder1","C:\SoftwareFolder2","C:\SoftwareFolder3")
sFile="C:\myExeFiles.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Const ForReading = 1
Const ForWriting = 2
Const OverwriteIfExist = -1

Set fFile = objFSO.CreateTextFile(sFile, OverwriteIfExist, OpenAsASCII) 

For Each x In Folders
    Set objFolder = objFSO.GetFolder(x)
        suckTheData objFSO, fFile, objFolder
    Set objFolder = Nothing
Next
MsgBox("Done")
Set objFSO = Nothing

Sub suckTheData(objFSO, fFile, objFolder)
    ' *** STEP 1 *** 'Find files with a partiular extension in this folder 
    For Each objFile In objFolder.Files
        If UCase(objFSO.GetExtensionName(objFile.Name))="EXE" Then
            fFile.Write objFile & vbCrLf
            If Err.Number <> 0 Then 
                fFile.Write "Error: " & objFile & " " & Err.Number & Err.Source & " " &  Err.Description & vbCrLf
            End If
        End If     
    Next
    Set objFile = Nothing

    ' *** STEP 2 *** 'Now that we've processed files, repeat for subdirectories 
    For Each subf In objFolder.SubFolders
    'some folders can't/shouldn't be checked - 
    '16 is a normal folder, 32 is an archive, 1046 is symbolic, etc
        If subf.Attributes ="16" Then
                suckTheData objFSO, fFile, subf
        End If
    Next
    Set subf = Nothing

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM