Listary 6 启动器模式预览版

  1. 已有搜索历史功能,会考虑自动显示常用项。
  2. 已在计划中,正式版应该会有。
  3. 在计划中,低优先级,版本稳定后再考虑。
  4. 预览版中已有,并且 Listary 内部也会智能分配权重。
  5. 直接添加多个网站,并设置相同的关键字即可,Listary 5中也支持。

打开一分钟内直接崩溃, win10(1803)

重新跟了个错误信息

System.AggregateException: 未通过等待任务或访问任务的 Exception 属性观察到任务的异常。因此,终结器线程重新引发了未观察到的异常。 ---> System.ArgumentOutOfRangeException: 不是有效的 Win32 FileTime。
参数名: fileTime
   在 System.DateTime.FromFileTimeUtc(Int64 fileTime)
   在 Listary.DiskSearch.FileDBInit.Add(Boolean isFolder, UInt64 frn, UInt64 parentFRN, UInt64 dateModified, UInt32 attributes, Char* fileName, Int32 fileNameLen)
   在 Listary.DiskSearch.MasterFileTable.MftReader.ListMftFileNames(ListFileNameFunc listFunc)
   在 Listary.DiskSearch.NtfsVolume.RebuildIndex()
   在 Listary.DiskSearch.NtfsVolume.InitDB(SavedVolume savedVolume)
   在 Listary.DiskSearch.DiskSearchService.Start(String savedIndexPath, Boolean forceRebuild)
   在 System.Threading.Tasks.Task.Execute()
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.Threading.Tasks.TaskExceptionHolder.Finalize()
---> (内部异常 #0) System.ArgumentOutOfRangeException: 不是有效的 Win32 FileTime。
参数名: fileTime
   在 System.DateTime.FromFileTimeUtc(Int64 fileTime)
   在 Listary.DiskSearch.FileDBInit.Add(Boolean isFolder, UInt64 frn, UInt64 parentFRN, UInt64 dateModified, UInt32 attributes, Char* fileName, Int32 fileNameLen)
   在 Listary.DiskSearch.MasterFileTable.MftReader.ListMftFileNames(ListFileNameFunc listFunc)
   在 Listary.DiskSearch.NtfsVolume.RebuildIndex()
   在 Listary.DiskSearch.NtfsVolume.InitDB(SavedVolume savedVolume)
   在 Listary.DiskSearch.DiskSearchService.Start(String savedIndexPath, Boolean forceRebuild)
   在 System.Threading.Tasks.Task.Execute()<---

下面这个好像是我之前找的调试器的问题, 请无视

Removed
System.ArgumentOutOfRangeException: 容量超出了最大容量。
参数名: capacity
   在 System.Text.StringBuilder.ReplaceBufferAnsiInternal(SByte* newBuffer, Int32 newLength)
   在 Listary.DiskSearch.ListNtfsVolumes.FindNextVolume(FindVolumeSafeHandle hFindVolume, StringBuilder lpszVolumeName, UInt32 cchBufferLength)
   在 Listary.DiskSearch.ListNtfsVolumes.ListVolumes()
   在 Listary.DiskSearch.DiskSearchService.Start(String savedIndexPath, Boolean forceRebuild)
   在 Listary.Core.Search.DiskSearchProxy.<>c__DisplayClass13_0.<Start>b__0()
   在 System.Threading.Tasks.Task.InnerInvoke()
   在 System.Threading.Tasks.Task.Execute()

不知道什么错误和分区.
因为从调试器看,出错的时候实际上已经遍历完了所有分区了
而且奇怪的是我拿错误代码单独跑了下又没这个问题…

希望能出窗口快速切换的插件

感谢反馈,已经记录,下个版本中会修复。

应该会有。

非常棒!很好看!没有白付费!万分赞作者。

预览版应该和不对我电脑胃口,折腾至今,还没正常打开过。所以N多功能看不到 :sob:

至于这个,我在5里也试过,知道可以,但在一个条目里操作多项和在多个条目里操作一项的区别应该很大的吧。比如想更改某一项关键字的话,需要一项一项找到再改就很麻烦了,远不如在一个文本框里更改方便。

前面调试器的那个问题, 应该是Api签名不正确造成的
ListNtfsVolumes.FindNextVolume, FindFirstVolume需要移除StringBuilder前面的[Out]
, 否则在最后一次循环中, StringBuilder可能访问到部分未初始化的内存缓冲区(可以看到在离开循环后, StringBuilder内存在随机字符), 可能在部分情况上造成崩溃(不清楚实际上会不会, 因为我实际跑的时候只是乱码, 没崩)

参考:(StringBuilder的默认值为[In, Out])

这里我是这样考虑的:

  1. 绝大多数用户不需要同一关键字对应多个条目。
  2. 有些用户确实需要,但一般就一个关键字对应2-3项。
  3. 关键字设定后很少修改。
  4. 修改的话两三条改起来也不麻烦。

所以这里先保持现状了。

感谢反馈,这里肯定有点问题。我本机碰到过一次,后来再也没法重现,就没管。

[Out]问题不大,.NET 自己也是这种用法。例如

int GetWindowTextW(
  HWND   hWnd,
  LPWSTR lpString,
  int    nMaxCount
);

对应的声明是

        [DllImport(PresentationNativeDll, EntryPoint = "GetWindowTextWrapper", CharSet=CharSet.Auto, BestFitMapping = false, SetLastError = true)]
        public static extern int GetWindowText(HandleRef hWnd, [Out] StringBuilder lpString, int nMaxCount);

https://referencesource.microsoft.com/WindowsBase/a.html#f244c095e970602f

当时函数声明是直接从pinvoke.net上复制的。现在看下有些问题,例如没指定CharSet调到 Ansi 版本去了,不知道是不是真正原因,先改下试试。

今天又想折腾下自己了,结果点了Listary.Main.exe后就弹这个了,比第一次罢工更彻底。

忍忍,快了……

你接着忽悠

1 Like

:joy::joy:

作者真是太厉害了,没想到还是国人,为你骄傲!

用了everything很长时间,昨天偶然知道listary就毫不犹豫地买了正版,非常棒,比everything应用的场景要多得多,也强大得多,已经离不开listary了。

期待新版本的诞生,祝愿listary开发顺利、越来越好!

感谢支持!

什么时候推出正式版呀,等了很久了,基本每个月都来看下有没有更新!非常期待哦

过几天再发个新版,接近最终版了。

2 Likes

现在支持三维软件Maya了吗-。-非常的愁。。。

那 Listary 6 正式版本也得要求 win10 的版本足够新么?我这边是保持的 win10 LTSB 2016,暂时不会考虑功能性升级,只进行安全性升级。下一次得看 2019的LTSC 版本情况考虑了